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

如何在ggplot2的同一图表中绘制两条趋势线?

问题

现有包含2个处理组(C、S)、3个样本的基因表达长格式数据,示例如下:

Group   Gene    Sample  exp
C   Gene_1  Sample1 0.8833248
C   Gene_2  Sample1 2.9193536
C   Gene_3  Sample1 -4.27416
S   Gene_1  Sample1 -1.6297201
S   Gene_2  Sample1 3.6535838
S   Gene_3  Sample1 -4.27416
C   Gene_1  Sample2 -0.3275709
C   Gene_2  Sample2 3.4885281
...
C   Gene_3  Sample3 -2.923909
S   Gene_1  Sample3 0.3514516
S   Gene_2  Sample3 2.981017
S   Gene_3  Sample3 -3.1599246

目前能单独绘制每个处理组的趋势图,但无法在同一图表中同时展示两个处理组的趋势线。尝试的代码如下:

C_S<-ggplot(CS_long_fmt, aes(x=Sample, y=exp)) +
geom_line(aes(group=Gene)) +
stat_summary(aes(x=as.numeric(Sample)), fun=mean, geom='line',
           size=1, color='blue')
解决方案

核心问题是原代码未将Group变量映射到趋势线的分组或颜色属性,导致stat_summary仅计算全局均值而非按处理组分组计算。修改后的代码如下:

library(ggplot2)

C_S <- ggplot(CS_long_fmt, aes(x = Sample, y = exp)) +
  # 绘制所有基因的折线(按Gene分组,低透明度避免干扰趋势线)
  geom_line(aes(group = Gene), alpha = 0.3, color = "gray") +
  # 按处理组计算均值并绘制趋势线,用颜色区分组
  stat_summary(
    aes(x = as.numeric(Sample), group = Group, color = Group),
    fun = mean, 
    geom = 'line',
    size = 1
  ) +
  # 可选:添加均值点,增强趋势线可读性
  stat_summary(
    aes(x = as.numeric(Sample), group = Group, color = Group),
    fun = mean,
    geom = 'point',
    size = 2
  ) +
  # 自定义处理组颜色(可选)
  scale_color_manual(values = c("C" = "blue", "S" = "red")) +
  # 设置坐标轴与图例标签
  labs(x = "样本", y = "基因表达量", color = "处理组") +
  # 主题优化(可选)
  theme_bw()

关键修改说明

  • 在stat_summary的aes中添加group = Group:确保按处理组分别计算均值并绘制趋势线
  • 映射color = Group:用不同颜色区分两个处理组的趋势线
  • 给单个基因折线设置alpha=0.3:弱化背景线条,突出趋势线
  • 可选添加均值点:让趋势线的数值节点更清晰直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:50:25