在ggplot中关闭一些传说

假设我有一个具有多个图例的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 = FALSE传递给geom_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没有show参数。

如何指定显示哪些图例?

227350 次浏览

你可以在scale_..._...()中使用guide = "none"来抑制图例。

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

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

或者使用函数guides(),你应该为你不想显示为图例的元素/外观设置"none",例如fillshapecolour

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 != "")

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