【问题标题】:Create colored regions below a line chart in R with ggplot2使用 ggplot2 在 R 中的折线图下方创建彩色区域
【发布时间】:2020-08-26 02:05:37
【问题描述】:

我正在使用上面的折线图,它是由代码生成的:

ggplot(data=df) + geom_line(aes(x=date,y=germany,col="Germany")) +
  geom_line(aes(x=date,y=korea,col="Coreia do Sul"))  +  
  scale_color_manual(values=c("black","blue")) +
  ylab("Confirmed cases")

数据框df的第一行是:

  date             germany  korea
1 2020-01-22       0        1
2 2020-01-23       0        0
3 2020-01-24       0        1
4 2020-01-25       0        0
5 2020-01-26       0        1
6 2020-01-27       1        1

我想在曲线下方创建彩色区域,如下所示: 可能吗?提前致谢!

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow。链接中显示的图表在 x 轴上的每个点都有超过 1 个值。它还将色带设置为特定的 y 轴值,因此在 300 和 1000 之间有一个黄色水平带。这就是你想要的 - y 轴值的色带,德国和韩国的计数被绘制为重叠行?
  • 没错。我的目标是有一个低于 300 的绿色区域,一个介于 300 和 1000 之间的黄色区域,以及高于 1000 的红色区域。就像上一张图​​片一样。
  • ggplot 中的 geom_ribbon 命令对你有用吗?我自己没用过。以下是两个引用 geom_ribbon 选项的答案,可能对stackoverflow.com/questions/37277729/…stackoverflow.com/questions/49310317/… 有帮助。您需要更改颜色选项以获得所需的颜色选项,因为默认值不一样。
  • 了解 geom_ribbon() 正是我所需要的。谢谢大家的帮助!

标签: r ggplot2


【解决方案1】:

这是一种基本方法。只是作为概念的说明性证明,让我们在 [0, 5*pi] 上取两个函数 y1(x) = sin(x) + 1y2(x) = max(0, 8cos(x)exp(-.3x)) 来表示一些任意数据:

# libraries dplyr, tibble
df <- seq(0, 5*pi, by=.01) %>% 
    enframe(value="x") %>%
    mutate(y1=sin(x) + 1, y2=pmax(0, 8 * cos(x) * exp(-.3 * x) + 1));

然后我们可以使用(对于 0.5 和 1.5 处的任意断点):

df %>%
  mutate(ymax=pmax(y1, y2)) %>%
  ggplot(aes(x, y1)) + 
  geom_ribbon(aes(ymin=pmin(ymax, 0),   ymax=pmin(ymax, 0.5)), fill='green') +
  geom_ribbon(aes(ymin=pmin(ymax, 0.5), ymax=pmin(ymax, 1.5)), fill='yellow') +
  geom_ribbon(aes(ymin=pmin(ymax, 1.5), ymax=pmin(ymax, max(ymax))), fill='red') +
  geom_point() +
  geom_point(aes(y=y2), color='blue')

在曲线下产生彩色区域:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    相关资源
    最近更新 更多