在ggplot中为特定行着色

Posted

技术标签:

【中文标题】在ggplot中为特定行着色【英文标题】:Coloring a specific line in ggplot 【发布时间】:2022-01-12 13:59:42 【问题描述】:

我使用 ggplot 绘制数百条模拟路径。数据已由 pivot_longer 组织,如下所示(200 条模拟路径,每条路径有 2520 个周期;首先是模拟 1,然后是模拟 2,依此类推,ind 显示每个周期的模拟值):

sim period ind
1 0 100.0
1 1 99.66
. . .
1 2520 103.11
2 0 100.0
. . .
. . .
200 0 100.0
. . .
200 2520 195.11

不确定使用 pivot_long 是否最佳,但至少以下 ggplot 看起来不错:

p<-ggplot(simdata, aes(x=period, y=ind,color=sim, group=sim))+geom_line() 

用不同深浅的蓝色生成一个漂亮的图表。

我想做的是用不同的颜色(例如红色和绿色)为平均、中位数和四分位数路径着色。中位数、平均数和四分位数路径由上一周期的值定义。我已经知道这些的 sim 号码。例如。假设中间路径是 sim = 160 的路径。

我尝试了以下方法。

    添加一个新的 geom_line 指定中间路径的编号(sim):

    p + geom_line(aes(y = simdata[sim == 160,], color ="red")

这会失败,因为附加的 geom_line 与 simdata 的长度不同 (200*2520) - 即使图形的 x 轴只有 2520 个句点。

    统计摘要

     p + stat_summary(aes(group=sim),fun=median, geom="line",colour="red")
    

结果是所有行都被读取,模拟行也是如此。另外,我拒绝了这一点,因为让 ggplot 找到平均值、中位数等值需要更多时间,而不是在图形部分之前找到它们。

    gghighlight

我尝试了这个包,但不知道你是否可以指定路径号来着色。

【问题讨论】:

也许您可能不想绘制 200 条线,而是只绘制汇总统计信息(例如,一条线表示您的平均值),然后添加误差带(例如使用 geom_ribbon) 【参考方案1】:

也许尝试您的第一个解决方案,但将其传递给 geom_linedata 参数:

p + geom_line(data = simdata[simdata$sim == 160,], color ="red")

作为一些模拟数据的简单示例:

library(ggplot2)

df <- data.frame(a = rep(1:20, each = 100),
             b = rep(1:100, times = 20),
             c = rnorm(2000))

ggplot(df, aes(b, c, group = a)) +
  geom_line(colour = "grey") +
  geom_line(data = df[df$a==20,], colour = "red")

您还可以在aes 中将条件作为参数传递,它以scale_colour_manual 指定的颜色绘制一条线(更整洁,添加图例,带有可编辑的标签):

ggplot(df, aes(b, c, group = a, colour = a == 20)) +
  geom_line() +
  scale_colour_manual(values = c("TRUE" = "red", "FALSE" = "grey"))

由reprex package 创建于 2021-12-07 (v2.0.1)

【讨论】:

谢谢,这真的很有用!第一个选项还通过添加更多 geom_line 部分来支持多条不同颜色的线。

以上是关于在ggplot中为特定行着色的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化:使用R原生plot函数为指定曲线下面的区域着色ggplot2可视化在曲线的特定下方添加分割线ggplot2为指定曲线下面的区域着色

R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色在树状图dendrogram中为不同的层次聚类簇配置不同的色彩

带有 ggplot2 的散点图按 r 中的特定日期间隔着色

ggplot2:geom_ribbon 的填充颜色行为

在ggplot中着色

R(ggplot2)中密度图下的梯度着色