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

R语言多ID时间序列曲线同图绘制问题求助

解决方案:绘制多ID的温度-年龄曲线

问题分析

你遇到的问题主要来自两处:

  • Base R代码中拼写错误(nrows应为nrow)、颜色分配逻辑错误,以及循环的冗余操作
  • ggplot2代码中错误的分组设置(group=1会把所有数据当成一组),且年龄变量的处理方式导致x轴显示异常

下面针对两种方法分别给出修正后的代码,直接使用你提供的数据集即可运行。


方法1:Base R 绘图修正版

首先加载你提供的数据集并还原成初始的矩阵结构:

# 加载数据集
aql <- structure(list(Id = c("110f", "110f", "110f", "110f", "110f", "110f", "110f", "110f", "110f", "110f", "3270", "3270", "3270", "3270", "3270", "3270", "3270", "3270", "3270", "354f", "354f", "354f", "354f", "354f", "354f", "354f", "354f", "354f", "354f" ), variable = c(1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 3, 6, 9, 12, 15, 18, 21, 24, 27, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28), value = c(38.730612244898, 38.9367346938776, 39.019387755102, 39.2153583617747, 38.9600682593857, 38.9419795221843, 39, 38.8737201365188, 38.5609756097561, 38.8212328767123, NA, 39.5494845360825, 39.5896907216495, 39.9, 39.4855670103093, 39.3525773195876, 39.3855670103093, 39.3632653061225, 39.3575862068965, NA, 39.4225235849057, 39.6268041237113, 39.5020618556701, 39.5895833333333, 39.5666666666667, 39.4302083333333, 39.3822916666667, 39.6345360824742, 39.4631944444444)), row.names = c(NA, -29L ), class = "data.frame")

# 重新整理成初始的矩阵结构
age_Temperature <- tapply(aql$value, list(aql$Id, aql$variable), mean)

然后修正绘图代码:

# 定义对应ID数量的颜色集合
my_colors <- c("red", "green", "blue")

# 绘制第一条曲线,同时设置y轴范围包含所有数据
plot(age_Temperature[1, ], type='l', pch=20, xlab="âge", ylab="Temperature", 
     col=my_colors[1], ylim=range(age_Temperature, na.rm=TRUE))

# 循环绘制剩余曲线
for (ligne in 2:nrow(age_Temperature)) {  # 修正nrows为nrow
  lines(age_Temperature[ligne, ], col=my_colors[ligne])
  # 无需手动递增ligne,for循环会自动迭代
}

# 添加图例区分不同ID
legend("topright", legend=rownames(age_Temperature), col=my_colors, lty=1)

关键修正点:

  • 拼写错误修正:nrows → nrow
  • 颜色匹配:让每个ID对应唯一颜色,避免重复使用同一颜色向量
  • 轴范围设置:通过ylim确保所有曲线都在可见范围内
  • 添加图例:明确区分不同ID的曲线

方法2:ggplot2 正确版

使用ggplot2时,核心是按Id分组,同时处理缺失值避免干扰:

library(ggplot2)

# 清理缺失值(也可在geom_line中设置na.rm=TRUE替代)
aql_clean <- na.omit(aql)

# 绘制多曲线图表
p <- ggplot(aql_clean, aes(x=variable, y=value, color=Id, group=Id)) +
  geom_line(linewidth=1) +  # 加粗曲线提升可读性
  labs(
    title="Distribution de la temperature en fonction de l'age",
    x="âge (jours)",
    y="Temperature",
    color="ID"
  ) +
  theme_minimal()  # 可选:美化图表主题

print(p)

关键修正点:

  • 分组修正:移除错误的group=1,改为group=Id(ggplot2会自动根据color=Id分组,显式声明更稳妥)
  • 缺失值处理:通过na.omit清理NA,避免曲线断裂或异常显示
  • 标签优化:明确x轴为“âge (jours)”,让图表更易理解
  • 可选美化:使用theme_minimal让图表更简洁美观

两种方法都能实现“同一图中显示所有ID对应的曲线,每条曲线使用不同颜色”的需求,你可以根据使用习惯选择其中一种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:59:16