ggplot2 中的图例,删除级别

Legend in ggplot2, remove level

我的数据:

df <- data.frame(sp = c(LETTERS[1:8]),
                 tr = c("NS", "LS", "NS", "LS", "LS", "HS", "HS", "HS"),
                 bv = c(14, 5, 11, 5.6, 21, 5.4, 2, 4.8),
                 av = c(0.0, 14, 21, 48.4, 15, 55.6, 37, 66.2))

我画条形图

library(reshape2)
df1 <- melt(df, id.vars = c("sp", "tr"))

ggplot(aes(sp, value, fill = variable) , data = df1) + theme_classic() + 
  geom_bar(aes(lty = tr), lwd = 1.2, data = df1, stat = "identity", colour = "black", width =.8) + 
  theme(legend.position = "bottom" ) +
  scale_linetype_discrete(name = "ja") 

输出 我不喜欢的是传说。我只想使用第二部分“ja”中的行类型并删除“variable”部分。我想在图例框中使用白色背景,而不是灰色背景。

您可以通过在 guides 中设置 fill = FALSE 来删除 variable 图例,并在 guide_legend 中使用 override.aes 更改背景颜色(也在 guides) 如下:

ggplot(df1, aes(sp, value, fill = variable)) + 
  geom_bar(aes(lty = tr), lwd = 1.2, stat = "identity", colour = "black", width =.8) + 
  scale_linetype_discrete(name = "ja") +
  guides(fill = FALSE,
         lty = guide_legend(override.aes = list(lty = c('dotted', 'dashed', 'solid'),
                                                fill = "white"))) +
  theme_classic() +
  theme(legend.position = "bottom")

这导致以下情节: