Como posso saber programaticamente quantas facetas um ggplot possui?

13

Abaixo está o código e um gráfico.

O gráfico tem três facetas. Onde the_plotposso encontrar ele tem três facetas? Sim, eu poderia obter isso do mtcarsquadro de dados ou the_plot$data, mas não quero recriar a análise de dados. Em vez disso, quero inspecionar os elementos gráficos de the_plot, para não precisar duplicar a lógica do aplicativo em vários locais. the_plot$facetnão mostra nada que reconheço, nem as outras variáveis ​​de plotagem.

Estou usando o tidyverse 1.3.0.

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

lote facetado

dfrankow
fonte
Possivelmente ggplot_build(the_plot)$layout$layoutde stackoverflow.com/questions/44107119/…
MrFlick
Adicione alguns detalhes, the_plotnão é o que você vê no gráfico, mas uma descrição do que você deseja que seja plotado (dados, mapeamento, tema etc.). Quando você escreve the_plotno console, está realmente ligando print(the_plot), o que inicia um processo que realiza as escalas, o número e a posição das facetas etc., e depois envia caixas, linhas e texto para um dispositivo gráfico.
MrGumble

Respostas:

12

você pode acessar os dados do ggplot com a função gg_build ()

out <- ggplot_build(the_plot)

length(levels(out$data[[1]]$PANEL))
[1] 3
user12256545
fonte
8

Outro 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

Criado em 2020-04-21 pelo pacote reprex (v0.3.0)

yang
fonte