Visualitzar amb ggplot2

En aquest apartat aprendrem a visualitzar les dades amb ggplot2. Podeu veure un primer tast de les seves possilitats a ggplot extension gallery. El paquet de gràfics ggplot2 segueix una estructura de capes per desplegar les dades en un gràfic:

  1. Marc de dades
  2. Estètics
  3. Geometria
  4. Altres

Per començar haurem de carregar els següents paquets:

#recordeu que els paquets han d'estar prèviament instal·lats 
library(gapminder)
library(dplyr)
library(ggplot2)

Marc de dades

La primera capa simplement el marc de dades. Podem introduir prèviament transformacions amb funcions de dplyr abans de cridar la funció ggplot().

gapminder %>% #capa 1: marc de dades
  filter(country == "Germany") %>% #transformació prèvia amb dplyr
  ggplot(aes(x = year, y = lifeExp)) + #capa 2: estètics
  geom_line() #capa 3: geometria

Estètics

La segona capa són els estètics, que cridarem a dins de la funció ggplot() amb la funció aes(). Cada estètic és una variable representada al gràfic. Normalment hi introduïrem els dos eixos cartesians X i Y i altres estètics com el color. El següent gràfic hi ha quatre variables representades:

  • L’eix de les X representa el PIB per càpita.
  • L’eix de les Y representa l’esperança de vida.
  • El color de la geometria representa un continent diferent.
  • La mida de la geometria representa la població.
gapminder %>% #capa 1: marc de dades
 ggplot(aes(x = gdpPercap, y = lifeExp, color = continent, size = pop)) + #capa 2: amb 4 estètics
 geom_point() #capa 3: geometria

Geometria

La geometria és la forma en què les variables estaran representades al gràfic. N’hi ha vàries, per exemple:

  • Punts: geom_point()
  • Línies: geom_line() o geom_smooth()
  • Columnes: geom_bar() o geom_col()
  • Totes les geometries comencen per geom_. N’hi ha vàries desenes.

A dins la funció de la geometria indicarem els seus atributs: de quin color la volem, quina forma, quin nivell de transparència, etc.

gapminder %>% #capa 1: marc de dades
 ggplot(aes(x = gdpPercap, y = lifeExp, fill = continent)) + #capa 2: amb 3 estètics
 geom_point(color = "darkslateblue", #capa 3: geometria amb 4 atributs
            size = 1.5, 
            shape = 22, 
            alpha = 0.5) 

Podem incloure vàries geometries en un mateix gràfic. En el següent exemple combinem un diagrama de dispersió i una línia:

  • A més, volem que el color dels punts varïi en funció del continent. Quan un aspecte de la geometria varia en funció d’una variable, és un estètic. Indicarem a dins de la funció geom_point(), també amb aes(), que el color varïi segons el continent.
  • En canvi, no volem que la transparència (alpha) varïi en funció de cap variable. Volem que tots els punts tinguin la mateixa transparència. En aquest cas, alpha és un atribut de la geometria i estarà a fora de la transparència.
  • Finalment, introduïm una línia suavitzada geom_smooth(). Aquesta línia comparteix dos estètics amb geom_point(): l’eix de les X i l’eix de les Y. Però en canvi, no volem representar una línia per a cada continent. És per això que no hem inclòs col = continent a la capa 2, sinó que la incloem a dins de geom_point() perquè sigui només un estètic d’aquesta geometria però no de les altres que vulguem representar.
gapminder %>%
 ggplot(aes(x = log(gdpPercap), y = lifeExp)) +
 geom_point(aes(col = continent), alpha = 0.4) +
 geom_smooth(col = "dodgerblue4")

Altres capes

La capa facet ens crea diversos gràfics en funció d’una o dues variables categòriques.

gapminder %>%
 ggplot(aes(x = gdpPercap, y = lifeExp)) +
 geom_point(aes(col = continent), alpha = 0.5, show.legend = FALSE) +
 geom_smooth(col = "firebrick4") +
 facet_wrap(. ~ continent, scales = "free")

gapminder %>%
 filter(year %in% c(1997, 2002)) %>%
 ggplot(aes(x = gdpPercap, y = lifeExp)) +
 geom_point(aes(col = continent), alpha = 0.4, show.legend = FALSE) +
 geom_smooth(col = "firebrick4") +
 facet_grid(year ~ continent)

Les escales indiquem com les dades es visualitzaran a través dels diferents estètics. Podem posar els títols d’eix, els límits del gràfic. etc.

gapminder %>%
  ggplot(aes(x = gdpPercap, y = lifeExp)) +
  geom_point(aes(col = continent), alpha = 0.4) +
  geom_smooth(col = "firebrick4", se = FALSE) +
  scale_x_continuous(name = "PIB per càpita",
                     expand = c(0,0)) +
  scale_y_continuous(name = "Esperança de vida",
                     limits = c(20, 80),
                     breaks = c(20, 40, 60, 80),
                     label = c("Joves", "Adults",
                               "Grans", "Vells")) +
  ggtitle("PIB per càpita i esperança de vida")

Normalment sempre utilitzarem coordenades cartesianes, però també podem utilitzar la capa de coordenades per convertir el gràfic a altres tipus de coordenades, com les polars.

gapminder %>%
  filter(year == 2002) %>%
  group_by(continent) %>%
  summarize(population = sum(pop, rm.na = TRUE)) %>%
  ggplot(aes(x = 1, y = population, fill = continent)) +
  geom_col() +
  coord_polar(theta = "y")

A la capa tema és on podem adonar el nostre gràfic. Aquí podem canviar el color de fons, el tipus de lletra de cada element, la mida de les lletres o qualsevol altre element del gràfic.

  • Per defecte, R sempre us mostrarà theme_gray().
  • Podeu canviar-lo si afegiu un nova capa a la funció ggplot(), per exemple, theme_classic(), theme_bw(), o theme_dark().
  • També podeu personalitzar fins l’últim detall el vostre gràfic amb la funció theme(). En aquest enllaç teniu un resum.
  • En el següent exemple hem utilitzat theme_minimal().
gapminder %>%
  filter(country != "Kuwait", 
         year %in% c(1962, 1977, 1987, 2002)) %>% 
  ggplot(aes(x = gdpPercap, y = lifeExp, col = continent, size = pop)) + 
  geom_point() +
  scale_x_log10() +
  facet_wrap(~ year) +
  labs(x = "PIB per càpita", y = "Esperança de vida", col = "Continent", size = "Població") +
  ggtitle("Evolució del PIB per càpita i l'esperança de vida (1962-2002)") + 
  theme_minimal()

Podeu baixar-vos nous temes com el que utilitzen The Economist o The Wall Street Journal mitjançant el paquet ggthemes carregant el paquet library(ggthemes).

Més informació

Molt important per dominar ggplot2:

  • Ajudeu-vos del Cheat Sheet de ggplot2.
  • Utilitzeu la pàgina web del paquet i feu clic en cada una de les funcions per obtenir més informació del seu ús.
  • Ajudeu-vos d’altres manuals. Un de molt interessant és del de R Para Ciencia de Datos (Grolemund and Wickham 2020).
  • En aquest enllaç podeu accedir a varis vídeos per conèixer més a fons ggplot2.

Font: Datacamp

Referències

Grolemund, Garrett, and Hadley Wickham. 2020. R para Ciencia de Datos. O’Reilly. https://es.r4ds.hadley.nz/index.html.
Previous