r - 根据变量更改单个 geom_ribbon() 的颜色

标签 r ggplot2

我想绘制一个 geom_ribbon()在那里我根据变量来设置波段的颜色。

例子:

library(dplyr)
library(ggplot2)

df <- tribble(
  ~year, ~lower, ~upper, ~type,
  2001, 150, 222, "A",
  2002, 53, 64, "A",
  2003, 31, 64, "B",
  2004, 10, 18, "B",
  2005, 30, 49, "B",
  2006, 37, 43, "A",
  2007, 54, 77, "B",
  2008, 58, 89, "A",
  2009, 50, 111, "A",
  2010, 40, 81, "A",
  2011, 49, 63, "A"
)

ggplot(df, aes(x = year)) +
  geom_ribbon(aes(ymin = lower, ymax = upper, fill = type))

这创造了:

enter image description here

这会创建两个单独的乐队,但我只想更改一个组合乐队的颜色。

最佳答案

自在 ggplot每行不能有超过一种颜色,我们可以将数据扩展为多条相互连接的线,使它们看起来是一条线。然后我们可以为每个部分分配一种颜色。

为了确保它们看起来是连接的,我们必须扩展数据,以便下一组的开始和上一组的结束具有相同的 xy坐标,但不同的组:

library(zoo)
library(data.table)
df$group <- rleid(df$type)
df_plot <- head(do.call(rbind, by(df, df$group, rbind, NA)), -1)
df_plot[,c("group","type")] <- lapply(df_plot[,c("group","type")], na.locf)
df_plot[] <- lapply(df_plot, na.locf, fromLast = TRUE)

ggplot(df_plot, aes(x = year)) +
  geom_ribbon(aes(ymin = lower, ymax = upper, fill = type, group = group))

enter image description here

将此与原始的未着色线进行比较:
ggplot(df, aes(x = year)) +
  geom_ribbon(aes(ymin = lower, ymax = upper))

enter image description here

一记-我lapplyna.locf所以我的类型不会改变。我知道你可以做 na.locf(df_plot) .

关于r - 根据变量更改单个 geom_ribbon() 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50217794/

相关文章:

使用 apply 函数替换在 R 中的 dfs 列表上迭代运行向后逐步回归的 for 循环,以减少计算时间

r - 查找字符串中单词的位置

rmarkdown 设置 kable 的位置

r - ggplot2 为值和日期/日期时间指定辅助轴

r - 如何叠加多个图

r - 如何使用 insertUI 将文本输入转换为 Shiny 应用程序中的输出

r - 如何从模型预测中解释confci函数?为什么这可能与 ggplot2 上的 bootstrap CI 图不匹配?

r - 在Rastervis中使用gplot方法时如何去除背景灰色?

r - 带填充和组的 ggplot2

r - As_labeller 与 ggplot2 facet_wrap 中的 expression()