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:
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()
ogeom_smooth()
- Columnes:
geom_bar()
ogeom_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é ambaes()
, 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 ambgeom_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òscol = continent
a la capa 2, sinó que la incloem a dins degeom_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()
, otheme_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.