使用光滑时无法删除图例符号后面的灰色区域

时间:2015-11-18 11:45:46

标签: r ggplot2 legend

我正在使用ggplot2和GAM平滑来查看两个变量之间的关系。在绘图时,我想删除符号背后的灰色区域以获得两种类型的变量。为此,我会使用theme(legend.key = element_blank()),但这在使用平滑时似乎不起作用。

有谁能告诉我如何删除图例中两条黑线背后的灰色区域?

我的MWE低于。

library(ggplot2)

len <- 10000
x <- seq(0, len-1)
df <- as.data.frame(x)
df$y <- 1 - df$x*(1/len)
df$y <- df$y + rnorm(len,sd=0.1)
df$type <- 'method 1'
df$type[df$y>0.5] <- 'method 2'

p <- ggplot(df, aes(x=x, y=y)) + stat_smooth(aes(lty=type), col="black", method = "auto", size=1, se=TRUE)
p <- p + theme_classic()
p <- p + theme(legend.title=element_blank())
p <- p + theme(legend.key = element_blank()) # <--- this doesn't work?
p

enter image description here

1 个答案:

答案 0 :(得分:5)

这是一个非常hacky的解决方法,基于如下概念:如果您将事物映射到ggplot中的aestethics,它们将出现在图例中。 geom_smooth具有填充美感,如果需要,可以允许不同组的不同颜色。如果下游难以修复,有时候更容易将这些不需要的物品从传说中删除。在您的情况下,se的颜色出现在图例中。因此,我创造了两个geom_smooths。一个没有线条颜色(但按类型分组)以创建绘制的se,一个线条类型映射到aes但se设置为false。

p <- ggplot(df, aes(x=x, y=y)) + 
  #first smooth; se only
  stat_smooth(aes(group=type),col=NA, method = "auto", size=1, se=TRUE)+
  #second smooth: line only
  stat_smooth(aes(lty=type),col="black", method = "auto", size=1, se=F) +
  theme_classic() +
  theme(
    legend.title = element_blank(),
    legend.key = element_rect(fill = NA, color = NA)) #thank you @alko989

enter image description here