2017-02-02 3 views
3

Fragefest, ob ein ggplot eine Legende hat

Wie würde ich herausfinden, programmatisch, wenn ein gegebenes ggplot Objekt eine Legende hat? Ich dachte zuerst an eine Umwandlung in eine grob und prüfen, ob es eine guide-box im Layout gibt, aber das fühlt sich ein bisschen hackish. Irgendwelche Vorschläge, wie man das in einer zuverlässigen & reproduzierbaren Weise macht?

-Code

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 

Antwort

5

Eine einfache Funktion (obwohl ich glaube, Ihre Methode ist zu fein):

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

Verwandte Themen