R / ggplot2:如何匹配重叠区域图中的图例颜色和绘图颜色?

我有两个区域图(称为’蓝色’和’绿色’),其中绿色主要在蓝色图下,但在很少的点上,它高于蓝色图.我想对两者使用透明度,例如alpha = 0.2,并且还能够为每个透明度指定颜色.我现在的问题是,由于绿色情节主要在蓝色情节下,其面积大多为混合颜色蓝绿色=其他颜色,并且只有少数地方显示其“真实”绿色.然而,传说当然显示蓝色绘图映射到蓝色,绿色绘图映射到绿色.问题是,当有人看到图表时,他们会感到困惑,因为绿色情节大多看起来不是绿色(因为它大部分时间都与蓝色重叠).

这是我的代码(我的真实应用程序的超简化版本).

df <- data.frame( date = 1:5, blue = 10, green = c(1,5,11,5,1))
df.m <- melt( df, id = 'date', variable_name = 'type' )
df.m$type <- ordered( df.m$type, c('green', 'blue'))

ggplot(df.m, aes(date,value)) +
  geom_area( aes(fill = type),  position = 'identity', alpha = 0.2) +
  scale_fill_manual ( values = c('green', 'blue') )

正如您所看到的,绿色图的“真绿色”区域非常小,因此绿色的图例颜色与绿色图的大部分不匹配.这当然是设计上的正确行为,但我想知道是否有某种方式我可以获得绿色的图例颜色,以及匹配的重叠蓝绿色.我尝试过的一件事是将蓝色变量转换为蓝色 – 绿色,然后将区域图堆叠起来(使用position =“stack”).这几乎可以工作但不太令人满意,因为新蓝色变量为负的日期的颜色看起来很奇怪.

有没有其他方法可以获得绿色的图例颜色和“重叠的蓝色/绿色”区域的颜色匹配?也许直接指定图例颜色的方法?任何帮助赞赏!

最佳答案 我不认为通过ggplot2中的简单调用可以在图例中定义自定义颜色,但是如果你坚持指定颜色,你可以通过opts(legend.position =“none”)绘制没有图例的图并附加一个单独的传说,例如.使用网格视口.包
gridExtra也可以成为后一项任务的重要资源.

点赞