首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用geom_ribbon (ggplot2)绘制颜色变化的两个时间序列的差

用geom_ribbon (ggplot2)绘制颜色变化的两个时间序列的差
EN

Stack Overflow用户
提问于 2017-07-07 22:10:19
回答 2查看 484关注 0票数 0

我试图通过绘制导出和导入图来可视化净出口(导出-导入),并根据净出口是正的还是负的来着色两个系列之间的差异。

使用R:

代码语言:javascript
复制
library(tidyverse)

data <- tribble(
  ~year, ~exports, ~imports,
  #--|--|----
  2003, 3, 3.6,
  2004, 4, 8.5,
  2005, 7, 7,
  2006, 9, 7,
  2007, 15, 9,
  2008, 17, 12,
  2009, 7, 8,
  2010, 8, 7,
  2011, 8, 8,
  2012, 7, 9,
  2013, 2, 11,
  2014, 9, 13,
  2015, 5, 15
)

ggplot(data, aes(x = year)) +
  geom_ribbon(aes(ymin = imports, ymax = exports))

这让我觉得:

它已经在系列之间的不同颜色,但不告诉我哪一个更高。

接下来我试过:

代码语言:javascript
复制
ggplot(data, aes(x = year)) +
  geom_ribbon(aes(ymin = imports, ymax = exports, fill = exports > imports))

产生的结果:

但这里似乎出了点问题,我不知道是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-07 22:43:58

这一点越来越接近了,尽管在值相等的地方没有一行仍然会失败。根据您的需要,您可以计算2008到2009年间它们交叉的点,并人为地将其添加到您的数据集中。

代码语言:javascript
复制
data$minval <- pmin(data$imports, data$exports)

ggplot(data, aes(x = year)) +
  geom_ribbon(aes(ymin = minval, ymax = exports), fill = "blue") +
  geom_ribbon(aes(ymin = minval, ymax = imports), fill = "red")
票数 2
EN

Stack Overflow用户

发布于 2021-11-24 15:22:39

有一个stat_difference(),它根据最大值是否高于最小值来填充丝带:

代码语言:javascript
复制
library(ggh4x)

df <- data.frame(
  x = 1:100,
  y = cumsum(rnorm(100)),
  z = cumsum(rnorm(100))
)

ggplot(df, aes(x = x)) +
  stat_difference(aes(ymin = y, ymax = z), alpha = 0.3) +
  geom_line(aes(y = y, colour = "min")) +
  geom_line(aes(y = z, colour = "max"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44980346

复制
相关文章

相似问题

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