Com o facetamento, você pode criar gráficos de vários painéis e controlar como as escalas de um painel se relacionam com as escalas de outro.
Uso simples de facetas
Se você estiver familiarizado com o ggplot2, conhecerá a estrutura básica de uma chamada para a função ggplot(). Para obter uma introdução ao ggplot2, você pode conferir nosso curso ggplot2. Ao chamar ggplot, você fornece uma fonte de dados, geralmente um quadro de dados, e pede ao ggplot para mapear diferentes variáveis em nossa fonte de dados para diferentes estéticas, como a posição dos eixos x ou y ou a cor de nossos pontos ou barras. Com as facetas, você ganha uma maneira adicional de mapear as variáveis. Para demonstrar isso, você usará o conjunto de dados a seguir, que inclui vários indicadores econômicos para uma seleção de países. A maioria delas são variantes do PIB, o Produto Interno Bruto de cada país.
Isso fornece a você um segundo gráfico separado, semelhante ao anterior, mas usando uma variável diferente. Digamos que você queira plotar o PIB (nominal) e o PIB (PPP) juntos. Para isso, você usará o facetamento. Primeiro, você precisará reformatar seus dados, alterando-os de um formato "amplo", com cada variável em sua própria coluna, para um formato "longo", em que você usa uma coluna para suas medidas e outra para uma variável-chave que nos informa qual medida usamos em cada linha.
Quando você tiver os dados nesse formato, poderá usar nossa variável-chave para plotar com facetas. Vamos criar um gráfico simples, mostrando tanto o PIB nominal (do nosso primeiro gráfico) quanto o PIB (PPP) (do nosso segundo gráfico). Para fazer isso, basta modificar o código para adicionar +facet_wrap() e especificar que ~measure, nossa variável-chave, deve ser usada para facetar.
Você provavelmente notou que os países, no eixo x acima, estão organizados em ordem alfabética. Se você quiser alterar isso, a maneira mais fácil de fazer isso é definir os níveis do fator Country. Vamos fazer essa reordenação, organizando os países em ordem de PIB nominal total.
Você deve ter notado que as facetas têm títulos curtos e simples, retirados dos níveis do fator measure. Vamos arrumar isso e dar às nossas facetas alguns rótulos mais bonitos. Para fazer isso, você criará uma função de rotulagem simples, variable_labeller, que retornará o nome apropriado quando for solicitado um dos valores de variable_names. Em seguida, você passa essa função para o argumento labeller de facet_wrap.
Vamos criar um gráfico facetado maior, usando cada uma das medidas econômicas.
econdatalong <-gather(econdata, key="measure", value="value",c("GDP_nom","GDP_PPP","GDP_nom_per_capita","GDP_PPP_per_capita","GNI_per_capita"))
variable_names <-list("GDP_nom"="GDP (nominal)","GDP_PPP"="GDP (purchasing power parity)","GDP_nom_per_capita"="GDP (nominal) per capita","GDP_PPP_per_capita"="GDP (purchasing power parity) per capita","GNI_per_capita"="GNI per capita")
variable_labeller <-function(variable,value){return(variable_names[value])}ggplot(econdatalong,aes(x=Country, y=value))+geom_bar(stat='identity', fill="forest green")+facet_wrap(~measure, ncol=1, labeller= variable_labeller)+scale_y_continuous(breaks =pretty(econdatalong$value, n =10))Tecnologia
Isso não é nada bom! Você não consegue ver os valores de três dos painéis. Por que isso acontece? Vamos dar uma olhada nos dados primários para ver por quê.
## Country GDP_nom GDP_PPP GDP_nom_per_capita## Ireland:1 Min. : 333994 Min. : 343682 Min. : 8643 ## Canada :1 1st Qu.: 2350773 1st Qu.: 1457187 1st Qu.:39512 ## France :1 Median : 3684816 Median : 3503268 Median :44814 ## Germany:1 Mean : 6027118 Mean : 7202368 Mean :44992 ## Sweden :1 3rd Qu.: 6657754 3rd Qu.: 8919260 3rd Qu.:54789 ## Japan :1 Max. :19390600 Max. :23159107 Max. :70638 ## (Other):2 ## GDP_PPP_per_capita GNI_per_capita Region## Min. :16807 Min. : 8690 Asia :2 ## 1st Qu.:43327 1st Qu.:38405 Europe :4 ## Median :49174 Median :43180 North America:2 ## Mean :48094 Mean :42215 ## 3rd Qu.:53322 3rd Qu.:53265 ## Max. :72632 Max. :58270 ##Tecnologia
Se você der uma olhada em cada coluna, verá que os valores em cada coluna variam em algumas ordens de magnitude. Por padrão, a facetação usará os mesmos limites e intervalos para os eixos X e Y. Para alterar isso, você pode adicionar este snippet ao seu código de facetas: scales="free_y" para que cada faceta use sua própria escala independente.
Isso é muito melhor. Cada faceta agora tem seu próprio eixo y independente.
Uso de facetas para criar subdivisões
Você deve ter notado que nosso conjunto de dados também inclui a variável Region, que indica a região em que o país em questão está localizado. Você pode usar essa variável para colorir nossas barras de acordo com a região, como segue:
No entanto, isso é um pouco confuso. Não seria bom se você pudesse colocar cada uma das diferentes regiões em seu próprio subpainel? Bem, com o facetamento, você pode! Aqui você usará facet_grid em vez de facet_wrap, pois isso facilitará o mapeamento de nossas facetas para duas variáveis, Region e measure, em que todas essas duas variáveis estão espalhadas pelas linhas e colunas de uma grade de gráficos. Observe que você também está definindo scales="free" e space="free", permitindo que nossos diferentes painéis ocupem diferentes quantidades de espaço. Você também precisará criar uma nova função de rotulador, que produzirá nomes para linhas e rótulos.
Descubra como escrever funções em Python reutilizáveis e eficientes. Domine parâmetros, instruções de retorno e temas avançados como funções lambda. Organize melhor seu código com main() e outras boas práticas.
Descubra tudo sobre a regressão logística: como ela difere da regressão linear, como ajustar e avaliar esses modelos no R com a função glm() e muito mais!
Introdução
Com o facetamento, você pode criar gráficos de vários painéis e controlar como as escalas de um painel se relacionam com as escalas de outro.
Uso simples de facetas
Se você estiver familiarizado com o ggplot2, conhecerá a estrutura básica de uma chamada para a função
ggplot(). Para obter uma introdução ao ggplot2, você pode conferir nosso curso ggplot2. Ao chamarggplot, você fornece uma fonte de dados, geralmente um quadro de dados, e pede ao ggplot para mapear diferentes variáveis em nossa fonte de dados para diferentes estéticas, como a posição dos eixos x ou y ou a cor de nossos pontos ou barras. Com as facetas, você ganha uma maneira adicional de mapear as variáveis. Para demonstrar isso, você usará o conjunto de dados a seguir, que inclui vários indicadores econômicos para uma seleção de países. A maioria delas são variantes do PIB, o Produto Interno Bruto de cada país.As seguintes variáveis estão presentes:
País: Você sabe o que está dizendo!
GDP_nom: Produto Interno Bruto como um valor nominal em dólares americanos
GDP_PPP: Produto Interno Bruto controlado para poder de compra diferente
GDP_nom_per_capita: Produto Interno Bruto como um valor nominal em dólares americanos em uma base per capita
GDP_PPP_per_capita: Produto Interno Bruto controlado para poder de compra diferente em uma base per capita
GNI_per_capita: Renda Nacional Bruta de cada país em uma base per capita.
Região: região do mundo onde o país está localizado.
Para começar, vamos fazer um gráfico de barras simples do PIB nominal de cada país.
Você também pode traçar outra variável, o PIB ajustado pela PPP.
Isso fornece a você um segundo gráfico separado, semelhante ao anterior, mas usando uma variável diferente. Digamos que você queira plotar o PIB (nominal) e o PIB (PPP) juntos. Para isso, você usará o facetamento. Primeiro, você precisará reformatar seus dados, alterando-os de um formato "amplo", com cada variável em sua própria coluna, para um formato "longo", em que você usa uma coluna para suas medidas e outra para uma variável-chave que nos informa qual medida usamos em cada linha.
Quando você tiver os dados nesse formato, poderá usar nossa variável-chave para plotar com facetas. Vamos criar um gráfico simples, mostrando tanto o PIB nominal (do nosso primeiro gráfico) quanto o PIB (PPP) (do nosso segundo gráfico). Para fazer isso, basta modificar o código para adicionar
+facet_wrap()e especificar que~measure, nossa variável-chave, deve ser usada para facetar.Isso funciona, mas você notará como os nomes dos países estão esmagados. Vamos reorganizar nossos painéis.
Personalização do layout e reordenação
O comando
facet_wrap()escolherá automaticamente quantas colunas você usará. Você pode especificar isso diretamente usandoncol=, da seguinte forma:Você provavelmente notou que os países, no eixo x acima, estão organizados em ordem alfabética. Se você quiser alterar isso, a maneira mais fácil de fazer isso é definir os níveis do fator
Country. Vamos fazer essa reordenação, organizando os países em ordem de PIB nominal total.Você também pode fazer algumas personalizações adicionais, como mover os rótulos das facetas para o lado esquerdo com o argumento
strip.position.Facetas de rotulagem
Você deve ter notado que as facetas têm títulos curtos e simples, retirados dos níveis do fator
measure. Vamos arrumar isso e dar às nossas facetas alguns rótulos mais bonitos. Para fazer isso, você criará uma função de rotulagem simples,variable_labeller, que retornará o nome apropriado quando for solicitado um dos valores devariable_names. Em seguida, você passa essa função para o argumentolabellerdefacet_wrap.Brincando com escalas e espaço
Vamos criar um gráfico facetado maior, usando cada uma das medidas econômicas.
Isso não é nada bom! Você não consegue ver os valores de três dos painéis. Por que isso acontece? Vamos dar uma olhada nos dados primários para ver por quê.
Se você der uma olhada em cada coluna, verá que os valores em cada coluna variam em algumas ordens de magnitude. Por padrão, a facetação usará os mesmos limites e intervalos para os eixos X e Y. Para alterar isso, você pode adicionar este snippet ao seu código de facetas:
scales="free_y"para que cada faceta use sua própria escala independente.Isso é muito melhor. Cada faceta agora tem seu próprio eixo y independente.
Uso de facetas para criar subdivisões
Você deve ter notado que nosso conjunto de dados também inclui a variável
Region, que indica a região em que o país em questão está localizado. Você pode usar essa variável para colorir nossas barras de acordo com a região, como segue:No entanto, isso é um pouco confuso. Não seria bom se você pudesse colocar cada uma das diferentes regiões em seu próprio subpainel? Bem, com o facetamento, você pode! Aqui você usará
facet_gridem vez defacet_wrap, pois isso facilitará o mapeamento de nossas facetas para duas variáveis,Regionemeasure, em que todas essas duas variáveis estão espalhadas pelas linhas e colunas de uma grade de gráficos. Observe que você também está definindoscales="free"espace="free", permitindo que nossos diferentes painéis ocupem diferentes quantidades de espaço. Você também precisará criar uma nova função de rotulador, que produzirá nomes para linhas e rótulos.Agora está muito mais claro! Cada região tem sua própria coluna de painéis, e cada métrica tem sua própria linha de barras.
Com isso, você está pronto para este tutorial. Espero que você tenha gostado de aprender sobre facetas.
Se você quiser saber mais sobre facetas, faça o curso Visualizing Big Data with Trelliscope do DataCamp.
Confira nosso site Getting Started with the Tidyverse: Tutorial.