首页 > 解决方案 > 按颜色分割 ggplot 功能区或线条

问题描述

我正在尝试绘制一条丝带,沿着该丝带通过分组因素(例如,使用不同的颜色或 alpha)突出显示某些感兴趣的区域。

以下是一些虚构的数据:

myYears=1980:2009
randDF <- data.frame(Year=myYears,
                     lowerQ=rnorm(myYears),
                     upperQ=2+rnorm(myYears),
                     mygroup=c(rep(1,10),rep(2,10),rep(1,10)))

第一个选项 - 用不同的颜色分割功能区 - 不起作用

ggplot(randDF)+
  geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ,fill=mygroup))

第二个选项 - 用不同的颜色绘制丝带的边缘 - 这画了一些东西但它不正确(见下图)

ggplot(randDF)+
  geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ),fill="grey")+
  geom_line(aes(x=Year,y=upperQ,colour=factor(mygroup)))+
  geom_line(aes(x=Year,y=lowerQ,colour=factor(mygroup)))

点击这里查看上面的ggplot

标签: rggplot2

解决方案


一种选择可能是创建三个组并将第 1 组和第 3 组的线涂成相同的颜色:

myYears=1980:2009
randDF <- data.frame(Year=myYears,
                     lowerQ=rnorm(myYears),
                     upperQ=2+rnorm(myYears),
                     mygroup=c(rep(1,10),rep(2,10),rep(3,10)))

ggplot(randDF)+
  geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ,fill=mygroup))

ggplot(randDF)+
  geom_ribbon(aes(x=Year,ymin=lowerQ,ymax=upperQ),fill="grey")+
  geom_line(aes(x=Year,y=upperQ,colour=factor(mygroup)), size = 2)+
  geom_line(aes(x=Year,y=lowerQ,colour=factor(mygroup)), size = 2) +
  scale_colour_manual(values = c("darkred", "darkgreen", "darkred"))

组之间的差距仍然存在一个小问题 - 解决方法可能是复制每个组的最后一个值。


推荐阅读