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

pir*_*pir 3 r legend ggplot2

我正在使用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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Her*_*oka 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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述