ggplot2:如何从geom_density图例中删除斜杠

25

我正在尝试在ggplot2中绘制一些重叠的密度图。我遇到了一个问题,即无法从图例中删除对角线斜杠。我已经尝试使用scale_fill_manual()和legend.key以及来自R Cookbook的技巧,但似乎都不起作用。

data(iris)
iris=iris
cols=brewer.pal(3,"Set1")

ggplot(iris) + 
    geom_density(position="identity",aes(x=iris$Sepal.Length,fill=cols[1]),
        colour="black",alpha=.5) +
    geom_density(position="identity",aes(x=iris$Sepal.Width,fill=cols[2]),
        colour="black",alpha=.5)+  
    theme_bw() +
    scale_fill_identity(guide="legend",labels=c("Sepal Width","Sepal Length"))+
    xlab("X axis") +
    theme(panel.background=element_blank(),
        legend.title=element_blank(),
        legend.key = element_rect(),
        legend.background = element_blank(),
        legend.justification=c(1,0), 
        legend.position=c(.75,.5),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

在这里输入图像描述

我该怎么做才能解决这个问题?

1个回答

39

试一下这个:

+ guides(fill = guide_legend(override.aes = list(colour = NULL)))

尽管这样会去掉黑色轮廓线,但可以通过将主题更改为以下内容来添加回去:

legend.key = element_rect(colour = "black")

我完全忘记添加这个重要说明:不要使用$运算符通过 x=iris$Sepal.Length 来指定美学属性!这不是使用 aes() 的预期方式,会导致错误和意外问题。


@Logister 没问题。不过请注意我的附加说明。 - joran
谢谢提醒。我会调整我的未来代码。 - Logister
4
好的!我认为Hadley应该将这个设为默认选项,或者加入一些选项来支持它。如果《R Cookbook》专门写了一节来介绍它,那说明这确实很重要 :-) - Tom Wenseleers
这在大部分情况下是有效的,但如果我有多个scale_..._...时,我还没有让它工作。例如,如果我有一个scale_fill_manual和一个scale_alpha_manual,那么我就无法去掉对角线。不确定为什么会出现这个问题。 - Nancy
对我来说,在RStudio(Windows)中只有底部和右侧边框被渲染,但在ggsave后看起来与预期相同。 - jbaums

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