我试图通过绘制导出和导入图来可视化净出口(导出-导入),并根据净出口是正的还是负的来着色两个系列之间的差异。
使用R:
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))这让我觉得:

它已经在系列之间的不同颜色,但不告诉我哪一个更高。
接下来我试过:
ggplot(data, aes(x = year)) +
geom_ribbon(aes(ymin = imports, ymax = exports, fill = exports > imports))产生的结果:

但这里似乎出了点问题,我不知道是什么。
发布于 2017-07-07 22:43:58
这一点越来越接近了,尽管在值相等的地方没有一行仍然会失败。根据您的需要,您可以计算2008到2009年间它们交叉的点,并人为地将其添加到您的数据集中。
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")发布于 2021-11-24 15:22:39
有一个stat_difference(),它根据最大值是否高于最小值来填充丝带:
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"))https://stackoverflow.com/questions/44980346
复制相似问题