You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何按唯一UID绘制单图多组浊度-时间曲线并批量导出

R浊度时间序列绘图实现方案

原代码问题梳理

  • 变量名拼写错误:data_long错写为datalong
  • 未生成Gen与Type的组合分组列,无法生成符合要求的图例
  • 未按UID筛选子数据集,无法单独生成每个UID对应的独立图表
  • par(mfrow)仅对R基础绘图生效,对ggplot2对象不生效
  • 映射参数错误:不存在Tree列,映射逻辑不符合需求

完整实现代码

# 加载依赖包
library(ggplot2)
library(tidyr)
library(dplyr)
library(patchwork) # 用于多图排版

# 修正后的示例数据集(原代码Gen大小写错误)
Gen <- c('M','M','M','M','F','F','F','F','M','M','M','M','F','F','F','F')
Site <- rep('FRX',length(Gen))
Type <- c('L','L','L','L','L','L','L','L','R','R','R','R','R','R','R','R')
UID <- c(1001,1002,1003,1004,1001,1002,1003,1004,1001,1002,1003,1004,1001,1002,1003,1004)
Time_1 <- c(100.78,112.34,108.52,139.19,149.02,177.77,79.18,89.10,106.78,102.34,128.52,119.19,129.02,147.77,169.18,170.11)
Time_2 <- c(150.78,162.34,188.53,197.69,208.07,217.76,229.48,139.51,146.87,182.54,189.57,199.97,229.28,247.73,269.91,249.19)
Time_3 <- c(250.78,262.34,288.53,297.69,308.07,317.7,329.81,339.15,346.87,382.54,369.59,399.97,329.28,347.73,369.91,349.19)
df <- data.frame(Gen,Site,Type,UID,Time_1,Time_2,Time_3)

# 自定义绘图函数
graphplotter <- function(df, export_type = "pdf", output_path = "turbidity_time"){
  # 1. 宽表转长表,生成分组列
  data_long <- df %>%
    mutate(group = paste0(Gen, "-", Type)) %>% # 生成M-L/F-L等分组用于图例
    pivot_longer(cols = starts_with("Time_"), names_to = "Time", values_to = "Turbidity") %>%
    mutate(Time = factor(Time, levels = c("Time_1", "Time_2", "Time_3"))) # 固定横轴顺序
  
  # 2. 遍历每个UID生成单图
  uid_list <- unique(data_long$UID)
  plot_list <- lapply(uid_list, function(uid){
    sub_data <- filter(data_long, UID == uid)
    p <- ggplot(sub_data, aes(x = Time, y = Turbidity, color = group, group = group)) +
      geom_line(linewidth = 1) +
      geom_point(size = 2) +
      labs(title = paste0("UID:", uid), x = "时间", y = "浊度", color = "分组") +
      theme_bw() +
      theme(
        legend.position = "top",
        plot.title = element_text(hjust = 0.5)
      )
    return(p)
  })
  
  # 3. 2行2列排版,导出文件
  combine_plot <- wrap_plots(plot_list, nrow = 2, ncol = 2) # 每页4张图
  # 按指定格式导出
  if(export_type == "pdf"){
    ggsave(paste0(output_path, ".pdf"), combine_plot, width = 12, height = 10)
  } else if(export_type == "jpeg"){
    ggsave(paste0(output_path, ".jpeg"), combine_plot, width = 12, height = 10, dpi = 300)
  } else if(export_type == "tiff"){
    ggsave(paste0(output_path, ".tiff"), combine_plot, width = 12, height = 10, dpi = 300)
  }
  # 返回绘图对象方便调试
  return(combine_plot)
}

# 调用函数,可通过export_type参数指定导出格式:pdf/jpeg/tiff
result_plot <- graphplotter(df, export_type = "pdf")
# 本地查看绘图效果
print(result_plot)

功能说明

  • 支持三种格式导出,默认导出pdf,可通过export_type参数切换
  • 每个UID的单图内包含4条对应M-L/F-L/M-R/F-R的曲线,附带对应图例
  • 自动按2行2列排布4张图,横轴固定为Time_1/Time_2/Time_3顺序
  • 标题自动匹配对应UID,格式符合需求

内容的提问来源于stack exchange,提问作者nasa313

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:45:04