ggplot图例显示透明度和填充颜色

15

我正在绘制两个半透明的色带。使用下面的代码,不包括scale_fill_manual部分,我基本上得到了想要的结果,具有名为"red"的图例和标签bluered。添加scale_fill_manual部分允许我命名图例及其条目,但我失去了图例中色块的透明度。

x=1:10
y1=1:10
y2=2:11
y3=10:1
y4=9:0
dt=data.frame(x,y1,y2,y3,y4)
library(ggplot2)    
ggplot(dt)+
  geom_ribbon(aes(x=x,ymin=y1,ymax=y2,fill='red'),
              alpha=0.4,)+
  geom_ribbon(aes(x=x,ymin=y3,ymax=y4,fill='blue'),
              alpha=0.5)+
  scale_fill_manual(name='legendname',
                    values=c('red','blue'),
                    labels=c('one','two'))

输入图片说明

sessionInfo()的输出结果

R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] scales_0.2.3   ggplot2_0.9.3  plyr_1.8       reshape2_1.2.2

loaded via a namespace (and not attached):
 [1] colorspace_1.2-0   dichromat_1.2-4    digest_0.6.0       grid_2.15.2        gtable_0.1.2       labeling_0.1      
 [7] MASS_7.3-22        munsell_0.4        proto_0.3-10       RColorBrewer_1.0-5 rstudio_0.97.248   stringr_0.6.2     
[13] tools_2.15.2   

有很多类似问题的解决方案(如自定义 ggplot 图例如何更改 ggplot2 图例的标题等),但我找不到专门解决这个问题的内容。

先行致谢。

1个回答

15

您可以通过添加以下内容来覆盖图例中的美学效果:

+ guides(fill = guide_legend(override.aes= list(alpha = 0.4)))

对于您的ggplot调用,您需要进行优化。

但是与ggplot中的大多数内容一样,将数据排列成使多个geom_ribbon调用不必要的方式可能更简单:

dt1 <- data.frame(x = c(x,x),
                  ymin = c(y1,y3),
                  ymax = c(y2,y4),
                  grp = rep(c('red','blue'),each = 10))
ggplot(data = dt1,aes(x = x,ymin = ymin, ymax = ymax,fill = grp)) + 
    geom_ribbon(alpha = 0.4) + 
    scale_fill_manual(name = "legendname",
                      values = c('red','blue'),
                      labels = c('one','two'))

输入图像描述


1
这个解决方案对我来说可行,因为我只需要1级透明度[0.4]。如果每个色带都有独特的透明度,你能否评论一下解决方案会如何改变? - RyanStochastic
@RyanStochastic alpha是一种美学,它本身可以像其他变量一样映射到一个变量上。因此,您可以将alpha = grp映射,并可能添加一个scale_alpha_manual组件。 - joran
你的第一个解决方案没有得到期望的结果。这是一个回归性错误吗?你需要使用类似于“alpha = 0.12”的更准确的调整,而不是“alpha = 0.4”。你的第二个解决方案有效。 - PatrickT
@PatrickT 对我来说它仍然运行良好(R 3.4.3,ggplot2 2.2.1,macOS)。使用alpha = 0.1覆盖看起来太浅显了,0.9明显太暗,而0.4看起来非常接近图表的其余部分(对我来说)。 - joran
谢谢 Joran。这是我得到的:传说看起来不比缎带暗吗?https://i.stack.imgur.com/JhRVg.png。【我使用的是 R 3.4.4 + gg2.2.1 + MacOS】 - PatrickT
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接