在ggplot中删除图例键周围的填充

43

我想要移除图例周围的灰色矩形。我尝试了各种方法,但都没有起作用。

ggtheme <- 
theme(
axis.text.x = element_text(colour='black'),
axis.text.y = element_text(colour='black'),
panel.background = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.border = element_rect(colour='black', fill=NA),
strip.background = element_blank(),
legend.justification = c(0, 1),
legend.position = c(0, 1),
legend.background = element_rect(colour = NA),
legend.key = element_rect(colour = "white", fill = NA),
legend.title = element_blank()
)

colors <- c("red", "blue")
df <- data.frame(year = c(1:10), value = c(10:19), gender = rep(c("male","female"),each=5))
ggplot(df, aes(x = year, y = value)) + geom_point(aes(colour=gender))  +
stat_smooth(method = "loess", formula = y ~ x, level=0, size = 1, 
    aes(group = gender, colour=gender)) +
ggtheme + scale_color_manual(values = colors) 

输入图片描述


2
由于我缺少积分,无法添加图像。 - Arthur Rose
我已经为您添加了截图。 - PatrickT
3个回答

53

你在图例键内看到灰色是因为你使用了stat_smooth()函数,默认情况下该函数还会绘制包围线的置信区间,并填充颜色(如果aes()中没有使用fill=指定颜色,则默认为灰色)。

解决方案之一是在不需要置信区间的情况下,为stat_smooth()设置se=FALSE

  +stat_smooth(method = "loess", formula = y ~ x, level=0, size = 1, 
              aes(group = gender, colour=gender),se=FALSE) 

另一个解决方案是使用函数 guides()override.aes=,以从图例中删除填充,但保留直线周围的置信区间。

  + guides(color=guide_legend(override.aes=list(fill=NA)))

谢谢,这个重写可以放在主题中吗? - Arthur Rose
1
不是因为它不是theme()元素,而是根据美学原则确定图例的制作方式。 - Didzis Elferts
7
由于某种原因,se=F 对我没有起作用——我改用了 +theme(legend.key=element.blank())。 - badgley
3
@badgley的意思是使用element_blank(),但他的评论对我有用。 - Richard DiSalvo
13
为了达到预期的效果,我不得不使用legend.key = element_rect(fill = NA) - Justapigeon
1
@Justapigeon 是的,对我也有效,其他解决方案却不行。这个答案可能应该被采纳,但我太懒惰了,没去做任何事情。 - Matthew Turner

49
theme_set(theme_gray() + theme(legend.key=element_blank())) 

如果您还想去除灰色背景:

theme_set(theme_bw() + theme(legend.key=element_blank())) 

1
这是一般的方法,但它基本上是由OP测试的。正如Didzis的答案所建议的那样,由于“stat_smooth()”默认主题的原因,这里的问题更加复杂。 - PatrickT

24
+ theme(legend.background=element_blank())

1
这对我不起作用。如果您认为这确实有效,可以多解释一些,否则最好将其删除。 - kangaroo_cliff
4
这个命令可以移除图例的背景色。通常会和"legend.key"命令一起使用。例如:theme(legend.key=element_blank(), legend.background=element_blank())。 - Ivone de Bem Oliveira
7
这是答案的绿色勾选标记。 - Peter Pisher

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