2016-03-03 78 views
0

我想为背景中的填充矩形添加一个图例,但我已经使用fill美学来填充我的条形图的条纹。 如何获取图例或手动创建匹配的图例?混合离散值和连续值以获得ggplot2中的填充向导

df <- data.frame(a=factor(c('a','b','c','c','d','e'), levels=c('a','b','c','d','e')), 
       x=seq(1,6), 
       b=factor(c('A','A','A','B','B','B'), levels=c('A','B')), 
       c=c(1,2,3,4,5,6), 
       d=rnorm(6)) 
ggplot(df, aes(x, c, fill=d, group=b)) + 
    geom_rect(aes(xmin=0.5,xmax=3.5,ymin=-Inf,ymax=Inf),alpha=0.05,fill="#E41A1C") + 
    geom_rect(aes(xmin=3.5,xmax=6.5,ymin=-Inf,ymax=Inf),alpha=0.05,fill="#377EB8") + 
    geom_bar(stat='identity', position=position_dodge()) + 
    coord_flip() + 
    scale_x_continuous(breaks=df$x, labels=df$a) 

所以我需要一个图例来描述我的两个geom_rect区域。我无法以任何方式映射我的两个区域来获取图例。一般来说,df$b列正在描述我现在手工完成的工作。

+1

在ggplot一般设计为每'aes'(例如参见[这里]一个刻度(https://groups.google.com/forum/#!topic/ggplot2/lDvsd4yJ0AE) )。正如@Didzis Elferts的回答所示,需要各种解决方法(另请参阅[这里](http://stackoverflow.com/questions/11752709/using-two-scale-colour-gradients-on-one-ggplot)和[这里](http://stackoverflow.com/questions/16129876/ggplot2-multiple-scales-legends-per-aesthetic-revisited))。 – Henrik

+0

感谢您的额外链接,已经有很好的解决方法。我想我以错误的方式搜索并没有找到它们。 – drmariod

回答

3

您可以将colour=设置为geom_rect()aes()中的变量b。这将使矩形周围的线条,并使传奇。线可以删除设置size=0geom_rect()。现在使用guides()override.aes=您可以更改fill=图例密钥。

ggplot(df, aes(x, c, fill=d, group=b)) + 
     geom_rect(aes(xmin=0.5,xmax=3.5,ymin=-Inf,ymax=Inf,colour=b),alpha=0.05,fill="#E41A1C",size=0) + 
     geom_rect(aes(xmin=3.5,xmax=6.5,ymin=-Inf,ymax=Inf,colour=b),alpha=0.05,fill="#377EB8",size=0) + 
     geom_bar(stat='identity', position=position_dodge()) + 
     coord_flip() + 
     scale_x_continuous(breaks=df$x, labels=df$a)+ 
     guides(colour=guide_legend(override.aes=list(fill=c("#E41A1C","#377EB8"),alpha=0.3))) 

enter image description here

+0

这真是太棒了!好戏!这不是我第一次与我想在'fill'上映射的两个独立变量作斗争。 – drmariod