¿Cómo puedo saber programáticamente cuántas facetas tiene un ggplot?

13

A continuación hay un código y un gráfico.

El gráfico tiene tres facetas. ¿Dónde the_plotpuedo encontrar que tiene tres facetas? Sí, podría obtener eso del mtcarsmarco de datos, o the_plot$data, pero no quiero volver a crear el análisis de datos. Más bien, quiero inspeccionar los elementos gráficos de the_plot, por lo que no tengo que duplicar la lógica de la aplicación en varios lugares. the_plot$facetno muestra nada que reconozca, ni las otras variables de la trama.

Estoy usando tidyverse 1.3.0.

library(tidyverse)
data(mtcars)
the_plot<-ggplot(mtcars, aes(mpg, disp, group=cyl)) + facet_wrap(~cyl) + geom_point()
the_plot

trama facetada

dfrankow
fuente
Posiblemente ggplot_build(the_plot)$layout$layoutde stackoverflow.com/questions/44107119/…
MrFlick
Agregue algunos detalles, the_plotno es lo que ve en la trama, sino una descripción de lo que desea trazar (datos, mapeo, tema, etc.). Cuando escribe the_ploten la consola, realmente está llamando print(the_plot), lo que inicia un proceso que comprende las escalas, el número y la posición de las facetas, etc., y luego envía cuadros, líneas y texto a un dispositivo gráfico.
MrGumble

Respuestas:

12

puede acceder a los datos de ggplot con la función gg_build ()

out <- ggplot_build(the_plot)

length(levels(out$data[[1]]$PANEL))
[1] 3
usuario12256545
fuente
8

Otro método

library(ggplot2)
data(mtcars)
the_plot<-ggplot(mtcars, aes(mpg, disp, group=cyl)) + facet_wrap(~cyl) + geom_point()
pb <- ggplot_build(the_plot)
pb$layout$layout$PANEL
#> [1] 1 2 3
#> Levels: 1 2 3

Creado el 21 de abril de 2020 por el paquete reprex (v0.3.0)

yang
fuente