确定ggplot是否有图例

时间:2017-02-02 08:15:58

标签: r ggplot2

问题

如果任何给定的ggplot对象有一个图例,我如何以编程方式找出?我在考虑首先转换为grob并检查布局中是否有guide-box,但感觉有点hackish。有关如何在可靠和可靠的情况下做到这一点的任何建议可重复的方式?

代码

library(ggplot2)
library(grid)
bp <- ggplot(iris, aes(Petal.Length, Petal.Width)) + theme(legend.position = "top")
noLegend <- bp + geom_point()
withLegend <- bp + geom_point(aes(color = Species))
gNoLegend <- ggplotGrob(noLegend)
gWithLegend <- ggplotGrob(withLegend)

any(gNoLegend$layout$name == "guide-box")
# [1] FALSE
any(gWithLegend$layout$name == "guide-box")
# [1] TRUE

1 个答案:

答案 0 :(得分:5)

一个简单的函数(虽然我认为你的方法也很好):

check_for_legend <- function(x) {
  'gtable' %in% class(try(cowplot::get_legend(x), silent = TRUE))
}
check_for_legend(noLegend)
  

FALSE

check_for_legend(withLegend)
  

TRUE