266

假设我有一个带有多个图例的 ggplot。

mov <- subset(movies, length != "")
(p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()
)

我可以像这样关闭所有图例的显示:

(p1 <- p0 + theme(legend.position = "none"))

传递show_guide = FALSEgeom_point(根据这个问题)关闭形状图例。

(p2 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point(show_guide = FALSE)
)

但是如果我想关闭颜色图例怎么办?似乎没有办法告诉show_guide将其行为应用于哪个图例。并且没有show_guide关于尺度或美学的论据。

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  scale_colour_discrete(show_guide = FALSE) +
  geom_point()
)
# Error in discrete_scale

(p4 <- ggplot(mov, aes(year, rating, shape = mpaa)) +
  aes(colour = length, show_guide = FALSE) +
  geom_point()
)
#draws both legends

这个问题表明控制图例的现代(自 ggplot2 v0.9.2 以来)方式是使用guides函数。

我希望能够做类似的事情

p0 + guides(
  colour = guide_legend(show = FALSE) 
)

guide_legend没有表演论据。

如何指定显示哪些图例?

4

2 回答 2

356

您可以使用guide = "none"inscale_..._...()来抑制图例。

对于您的示例,您应该使用scale_colour_continuous()因为length是连续变量(不是离散的)。

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
   scale_colour_continuous(guide = "none") +
   geom_point()
)

或者使用guides()您应该"none"为不想作为图例出现的元素/美学设置的功能,例如,fill, shape, colour

p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()    
p0+guides(colour = "none")

更新

两种提供的解决方案都适用于新ggplot2版本 3.3.5,但movies此库中不再存在数据集。相反,您必须使用新包ggplot2movies来检查这些解决方案。

library(ggplot2movies)
data(movies)
mov <- subset(movies, length != "")
于 2013-01-30T12:55:00.840 回答
51

您可以简单地添加show.legend=FALSE到 geom 以抑制相应的图例

于 2018-09-04T07:23:59.423 回答