Tutotial básico do ggplot

Autor

Edson Baccaro Junior

Data de Publicação

11 de fevereiro de 2025

Camadas ggplot

Essas são as camadas que podemos preencher para gerar um gráfico de ggplot, sendo que as três primeiras são necessárias - dados, estética e geometria.

dados |>
  ggplot(aesthetics()) +
  geometries(statistics()) +
  facets() +
  themes() +
  coord() +
  scales()

Pacotes do R

Se necessário, intale o pacote ‘gapminder’, e outros pacotes requeridos na exploração, e carregue-os.

if(!requireNamespace("gapminder", quietly = TRUE)) install.packages("gapminder")

if(!requireNamespace("kableExtra", quietly = TRUE)) install.packages("reactable")

if(!requireNamespace("tidyverse", quietly = TRUE)) install.packages("tidyverse")

if(!requireNamespace("janitor", quietly = TRUE)) install.packages("janitor")

if(!requireNamespace("janitor", quietly = TRUE)) install.packages("reactablefmtr")


library(tidyverse)

Dados

Utilizaremos a base de dados gapminder, cuja organização defende a análise da realidade com base em dados confiáveis.

Veja mais em: https://www.gapminder.org/

Tabela Gapminder

Características da base

glimpse(dados_gapminder)
Rows: 1,704
Columns: 6
$ country    <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan",…
$ continent  <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia,…
$ year       <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997,…
$ life_exp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.…
$ pop        <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 1…
$ gdp_percap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134,…

ggplot só com os dados

Oferecer somente a camada de dados para a função ggplot( ) retorna em branco, pois faltam as camadas de estética e geometria.

dados_gapminder |>
  ggplot()

ggplot com os dados e a estética

Oferecer dados e estética para a função ggplot( ) retorna o plano cartesiano com as escalas das variáveis oferecidas para cada eixo. Porém não há gráfico pois falta a camada de geometria.

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp))

ggplot com as camadas obrigatórias

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp)) +
  geom_point()

Adicionar linha de tendência

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp)) +
  geom_point() +
  geom_smooth()

# pode-se mudar o tipo da regressão pelo argumento method =

Transparência dos pontos

O argumento alpha= do geom_point( ) é útil para ver mais claramente a concentração da massa de dados.

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp)) +
  geom_point(alpha=0.1)

Colorir categoria global e linha de tendência

Ao colorir os pontos por uma variável que etiquetará os dados dentro da estética global, é criado uma categorização que afetará o comportamento das camadas subsequentes. Nesse caso, a linha de tendência será criada para cada categoria.

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp, colour = continent)) +
  geom_point() +
  geom_smooth()

Colorir categoria local e linha de tendência

Em contraste ao exemplo anterior, ao colorir os pontos por uma variável que etiquetará os dados dentro da estética da camada local, é criada uma categorização que afetará apenas o comportamento daquela camada. Nesse exemplo a linha de tendência é criada para o conjunto total dos dados, e não para cada categoria.

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp)) +
  geom_point(aes(colour = continent)) +
  geom_smooth()

Incluir informações textuais no gráfico

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp)) +
  geom_point(aes(colour = continent)) +
  geom_text(aes(label = country))

Filtrar quais dados quero destacar com texto

Mostrar, dentre toda a base, o país que alcançou a maior expectativa de vida em cada continente, para o ano mais recente da base.

dados_gapminder |>
  ggplot(aes(x=gdp_percap, y=life_exp)) +
  geom_point(aes(colour = continent), alpha = 0.3) +
  geom_text(data = dados_gapminder |> 
              group_by(continent) |> 
              filter(life_exp==max(life_exp), year==max(year)) |> 
              ungroup(),
            aes(label = country))

Usar facetas:

Gráfico de linhas para visualizar média e dispersão

Essa visualização possibilita ver a evolução conjunta dos países de cada continente. Se diminuiram a dispersão, quer dizer que os países daquele continente evoluíram de forma generalizada, como é o caso do continente Americano. Diferentemente do caso da Africa, em que a expectativa de vida média aumentou, mas a dispersão também.

dados_gapminder |>
  ggplot(aes(x=year, y=life_exp, colour = continent)) +
  geom_point(colour = "gray") + #ao colocar a cor dos pontos a cor configurada segundo o continente no global não tem efeito nesta camada. Se não tivesse especificado a cor aqui, teria seguido as cores pela categorização de continente.
  geom_line(aes(group = country),colour = "gray") + #ao agrupar por país, a função cria uma curva que representa a série de tempo de cada país. Quando o argumento group é omitido, as observações de todos os países são ligadas umas às outras na sequência da data, sem agrupar por país.
  geom_smooth()+ # cria a curva de tendência, e nesse caso serve como uma média
  theme_minimal()+ # altera o tema de fundo das legendas de continente dentro do gráfico
  facet_grid(continent ~ .) # essa função produz múltiplos gráficos e os organiza em uma matriz de linhas e colunas. A sintaxe x ~ y oferece qual variável categórica vai determinar as linhas (x) e qual vai determinar as colunas (y). Quando uma das variáveis é omitida por um ponto '.', então cria-se apenas linhas ou colunas, a depender de qual foi omitida. Nesse exemplo, continentes determina a quantidade de linhas, e será organizado em uma coluna.

Escala do eixo y livre

Com a flexibilização do eixo y nota-se pouca diferença para a análise dos continentes, exceto para Oceania, que na visualização anterior aparenta não ter ganhos expressivos em expectativa de vida. Com o ajuste do eixo y é possível notar mais claramente uma mudança de trajetoria importante a partir do final da década de 70.

dados_gapminder |>
  ggplot(aes(x=year, y=life_exp, colour = continent)) +
  geom_point(colour = "gray") +
  geom_line(aes(group = country),colour = "gray") + #ao agrupar por país, a função cria uma curva que representa a série de tempo de cada país. Quando o argumento group é omitido, as observações de todos os países são ligadas umas às outras na sequência da data, sem agrupar por país.
  geom_smooth()+ # cria a curva de tendência, e nesse caso serve como uma média
  theme_minimal()+ # altera o tema de fundo das legendas de continente dentro do gráfico
  facet_grid(continent ~ ., scales = "free_y") # cria um eixo y para cada valor da categoria oferecida como argumento, no caso: continent. O argumento scales cria flexibilidade ou fixação dos eixos.

Usar a estética label para nomear os pontos do gráfico

Para este exemplo foi usada a tabela storms do pacote dplyr, já carregado como dependência do pacote tidyverse.

storms |> 
  slice_sample(n=100) |> 
  ggplot(aes(x=pressure, y=wind)) + 
  geom_label(aes(label=name))