我想在ggplot2中对色带进行着色。当使用geom_ribbon时,我可以指定ymin和ymax以及填充颜色。它现在做的是着色ymin和ymax之间的所有内容,而不考虑上限或下限。ggplot2:填充geom_ribbon的颜色行为
实施例(从因特网修改):
library("ggplot2")
# Generate data (level2 == level1)
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron), level2 = as.vector(LakeHuron))
# Change Level2
huron[1:50,2] <- huron[1:50,2]+100
huron[50:90,2] <- huron[50:90,2]-100
h <- ggplot(huron, aes(year))
h +
geom_ribbon(aes(ymin = level, ymax = level2), fill = "grey80") +
geom_line(aes(y = level)) + geom_line(aes(y=level2))
我想填充的区域,其中(YMIN> YMAX),用不同的颜色比在哪里(ymin < ymax)。在我的真实数据中,我有导出和导入值。在那里,我想为出口高于进口绿色的区域着色,其中进口大于出口,我希望色带变红。
替代方案:我想geom_ribbon只填充该区域,其中ymax> ymin。
有人知道这是怎么完成的吗?
感谢您的帮助。
哇,这太好了,非常感谢!它正是我想要的,因为我基本上可以将条件放入'fill ='中。不过,我会将我的更改请求打开,因为它不完美:填充无法完美应用于交点。 (这次对我来说没有问题)另外,我仍然认为ggplot2中的填充逻辑需要改变。 – ManuK
超级有用!有什么方法可以用长格式的数据实现相同的结果?例如,您的数据设置为:Year,Level(1或2),Value。我可以得到:h + geom_line(aes(y = Value,group = Level),但我无法弄清楚如何在这个结构中添加geom_ribbon()图层 –
不容易,我不认为'ggplot2'需要列,所以你需要有一个列作为'ymin'和'ymax'的值。'tidyr :: spread()'将你的长数据转换为所需的格式非常简单。 –