【问题标题】:How to vary LINE color with a variable in R graph (ggplot or similar)如何使用 R 图中的变量改变 LINE 颜色(ggplot 或类似)
【发布时间】:2017-05-01 16:46:54
【问题描述】:

我正在尝试改变 R 图中 LINE 的颜色(在同一系列数据中)。例如,如果您有显示一年中几周温度的点,并且它们与geom_line() 或等价物相连,我将如何显示这条线在较高温度的几周内呈深红色,而在较冷的几周内逐渐变为黄色? (如果点和线都可以基于相同的变量在相同的调色板/渐变中变化 - 比如温度,那将是理想的)。

bp.df <- NULL
bp.weeks <- 26
bp.days <- 7 * bp.weeks
bp.df$day <- 1:bp.days
bp.df$week <- ceiling(bp.df$day / 7)
bp.mean.normal <- 100
bp.sd.normal <- 20

bp.df <- as.data.frame(bp.df)

bp.df$normal <- rnorm(nrow(bp.df),bp.mean.normal, bp.sd.normal)
bp.df$day <- as.numeric(bp.df$day)

# make sure ggplot2 is installed and loaded

g <- ggplot(bp.df, aes(x = day, y = normal, color = normal)) + 
    geom_point() + 
    geom_line(col = bp.df$normal)
g

为什么线条颜色与“正常”变量的级别不匹配?我知道,因为它们连接两个点,所以线条必须“决定”使用哪个值,但是这个输出似乎使颜色完全随机。

如果在渐变中变化不起作用,我如何让这条线在前 50 天为红色,在接下来的 50 天为绿色,等等?

【问题讨论】:

  • 确实匹配;它使用normal 的值作为段的最左侧点,因为这是您通过aes 传递的向量。要使颜色每 50 天变化一次,请添加一个变量以作为颜色美学传递,例如ggplot(bp.df, aes(x=day, y = normal, color = cut(day, seq(0, 200, 50)))) + geom_point() + geom_line()
  • 谢谢,这个和下一条评论明确地澄清了我的困惑。显然,一个单独的变量对于驱动颜色是有意义的。

标签: r graph ggplot2 colors gradient


【解决方案1】:

试试这个:

g <- ggplot(bp.df, aes(x=day, y = normal, color = normal)) + geom_point() +
geom_line(aes(color=normal))

g

似乎 col 参数与 aes 参数中的颜色不同。

【讨论】:

  • 根据this post,在aes 中使用$ 可能会导致意外结果。您可以将此代码修改为g &lt;- ggplot(bp.df, aes(x=day, y = normal, color = normal)) + geom_point() + geom_line() 并获得相同的结果。由于您在 ggplot 的原始 aes 参数中已经有 color = normal,因此您无需再次调用它。
  • 谢谢,我没有意识到这一点。这听起来像是一个错误,希望能得到修复。
  • 谢谢大家,非常有帮助。
  • @thc,这不是ggplot 中的错误。由于ggplot 将数据作为data.frame 接收,因此无需使用$ 引用aes 参数中的列名。此外,在您修改后的答案中,您不需要 aes(color=normal) 调用中的 geom_line 。您已经在对ggplot 的原始调用中设置了colour 美学。我认为这不会影响任何事情,但这是一个多余的调用。
猜你喜欢
  • 2016-03-22
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 2023-02-22
  • 2019-06-16
相关资源
最近更新 更多