我正在使用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
答案 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