首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R- ggplot2:只填充线和引用值之间的区域。

R- ggplot2:只填充线和引用值之间的区域。
EN

Stack Overflow用户
提问于 2022-07-13 20:37:12
回答 2查看 83关注 0票数 1

我想使用ggplot2生成一个像下面这样的图,其中线和参考值之间的区域是阴影的,而阴影的颜色取决于y是大于还是小于参考值。

下面是一个使用LakeHuron数据集的reprex,将579设置为引用值,并使用geom_ribbon()进行阴影处理。这一点很接近,但我只想填充这条线和参考线之间的区域。

代码语言:javascript
复制
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron))

ggplot(data = huron, aes(x = year)) + 
  geom_ribbon(aes(ymin = 579, ymax = level, fill = level > 579)) + 
  geom_line(aes(y = level)) +
  geom_hline(yintercept = 579)

有人有什么想法吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-13 20:49:04

如果你想要两种不同的填充,你需要两条丝带:

代码语言:javascript
复制
ggplot(data = huron, aes(x = year)) + 
  geom_ribbon(aes(ymin = 579, ymax = ifelse(level > 579, level, 579),
                  fill = "Above average")) +
  geom_ribbon(aes(ymax = 579, ymin = ifelse(level > 579, 579, level),
                  fill = "Below average")) +
  geom_line(aes(y = level)) +
  geom_hline(yintercept = 579) +
  scale_fill_manual(values = c("#86b2d8", "#bf311a"), name = NULL) +
  theme_classic(base_size = 16)

票数 1
EN

Stack Overflow用户

发布于 2022-07-13 21:07:45

第二个选择是使用ggh4x::stat_difference,IMHO是ggh4x包的隐藏宝石之一:

代码语言:javascript
复制
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron))

library(ggplot2)
library(ggh4x)

ggplot(huron, aes(x = year)) +
  ggh4x::stat_difference(aes(ymin = 579, ymax = level), levels = c("Above average", "Below Average")) +
  geom_line(aes(y = level)) +
  geom_hline(yintercept = 579) +
  scale_fill_manual(limits = c("Above average", "Below Average"), values = rev(scales::hue_pal()(2))) +
  labs(fill = NULL)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72972363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档