在ggplot中删除图例标题

156

我正在尝试移除ggplot2中图例的标题:

df <- data.frame(
  g = rep(letters[1:2], 5),
  x = rnorm(10),
  y = rnorm(10)
)

library(ggplot2)
ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom")

在此输入图像描述

我看到这个问题,但那里的解决方案似乎都不适用于我。 大多数会出现一个关于opts已经被弃用并且要使用theme的错误。 我也尝试了各种版本的theme(legend.title=NULL)theme(legend.title="")theme(legend.title=element_blank)等等。 典型的错误信息如下:

'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)
'theme_blank' is deprecated. Use 'element_blank' instead. (Deprecated; last used in version 0.9.1)

自从0.9.3版本发布以来,我第一次使用ggplot2,发现有些更改很难搞懂......


7
你可以使用 labs() 来完成这个操作:在生成以上图表的代码中添加一行 labs(colour = "") - Dennis
5个回答

267

你已经快要完成了:只需添加theme(legend.title=element_blank())

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank())

这个Cookbook for R页面 提供了很多关于如何定制图例的细节。


5
这将移除所有图例的标题。想要更精细的控制,可以使用 guide = guide_legend() 命令。如果只想移除填充图例的标题但保留颜色图例的标题,可以使用如下代码:scale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red")) - PatrickT

12

这也可以工作,并且还展示了如何更改图例标题:

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  scale_color_discrete(name="")

14
这会将标题替换为空字符串,因此在标签和图例框之间会有额外的空间,只有当图例具有不同于其位置的颜色的框或背景时才会显示。因此,在简单情况下(例如“theme_bw()”),这是一种快速和方便的方法,但在图例周围有框并且位于绘图区域的情况下(我的通常做法),这不是最佳选择。 - PatrickT
1
+1 针对这个观察。我在使用两个不同的图例时遇到了问题,由上面的解决方案创建的它们之间的空白也是一个问题。为下面的图例设置 scale_color_manual(name=element_blank())+ 解决了我的问题。 - joaoal
1
@joaoal,element_blank()似乎是推荐的方法。设置name = NULL是另一种方式。 - PatrickT

4

当一个图中有多个图例时,如果要选择性地删除其中的一个标题而不留下空白,则可以将scale_函数的name参数设置为NULL,即:

scale_fill_discrete(name = NULL)

(感谢@pascal在另一个帖子的评论)


4

另一种选项是使用 labs 并将颜色设置为 NULL

ggplot(df, aes(x, y, colour = g)) +
  geom_line(stat = "identity") +
  theme(legend.position = "bottom") +
  labs(colour = NULL)

enter image description here


0

对于Error: 'opts' is deprecated,请使用theme()代替(已过时;最后在版本0.9.1中使用)。我将opts(title = "Boxplot - Candidate's Tweet Scores")替换为 labs(title = "Boxplot - Candidate's Tweet Scores")。它正常工作了!


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