gráfico de tarta
Bienvenido a mi blog! Soy Dominic Royé, investigador y docente de geografía física en la Universidad de Santiago de Compostela. Una de mis pasiones es la programación en R para visualizar y analizar cualquier tipo de datos. Por eso, mi idea de iniciar este blog tiene su origen en las publicaciones que he ido haciendo en el útimo año en Twitter sobre diferentes temas visualizando datos que describen el mundo. Además, me gustaría aprovechar la posibilidad del blog e ir publicando breves ensayos sobre visualización, gestión y manipulación de datos en R. Espero que os guste. Cualquier sugerencia o idea, será bienvenida.
Preámbulo
Siempre he querido escribir sobre el uso del gráfico de tarta. El gráfico circular es ampliamente usado en investigación, docencia, periodismo o en informes técnicos. Es más, no sé si es debido a Excel, pero todavía peor que el mismo gráfico de tarta es su versión en 3D (también para el gráfico de barras). Sobre las versiones 3D únicamente debo decir que no es recomendable, ya que en estos casos la tercera dimensión no contiene ninguna información y por tanto no ayuda en leer correctamente la información del gráfico. Respecto al gráfico de tarta, entre muchos expertos no se aconseja claramente su uso. Pero, ¿por qué?
Ya en un estudio hecho por Simkin (1987) encontraron que la interpretación y el procesamiento de ángulos es más díficil que el de formas lineales. Mayormente es más fácil leer un gráfico de barras que uno de tarta. Un problema que se hace muy visible cuando nos encontramos con; 1) demasiadas categorías 2) pocas diferencias entre las categorías 3) un mal uso de colores como leyenda ó 4) comparaciones entre varios gráficos de tarta.
Para decidir qué posibles representaciones gráficas existen para nuestros datos, recomiendo ir a la página web www.data-to-viz.com o usar Financial Times Visual Vocabulary.
Ahora bien, ¿qué alternativas podemos usar en R?
Alternativas al gráfico de tarta
Los datos sobre el estado de la enfermedad sarampión corresponden a junio de 2018 en Europa y vienen del ECDC.
#librerías
library(tidyverse)
library(scales)
library(RColorBrewer)
#datos
measles <- data.frame(
vacc_status=c("Unvaccinated","1 Dose",
">= 2 Dose","Unkown Dose","Unkown"),
prop=c(0.75,0.091,0.05,0.012,0.096)
)
#ordenamos de mayor a menor y lo fijamos con un factor
measles <- arrange(measles,
desc(prop))%>%
mutate(vacc_status=factor(vacc_status,vacc_status))
vacc_status | prop |
---|---|
Unvaccinated | 0.750 |
Unkown | 0.096 |
1 Dose | 0.091 |
>= 2 Dose | 0.050 |
Unkown Dose | 0.012 |
Gráfico de barra o similar
ggplot(measles,aes(vacc_status,prop))+
geom_bar(stat="identity")+
scale_y_continuous(breaks=seq(0,1,.1),
labels=percent, #convertimos en %
limits=c(0,1))+
labs(x="",y="")+
theme_minimal()
ggplot(measles,aes(x=vacc_status,prop,ymin=0,ymax=prop))+
geom_pointrange()+
scale_y_continuous(breaks=seq(0,1,.1),
labels=percent, #convertimos en %
limits=c(0,1))+
labs(x="",y="")+
theme_minimal()
#definiciones sobre el theme que usamos
theme_singlebar <- theme_bw()+
theme(
legend.position = "bottom",
axis.title = element_blank(),
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
panel.border = element_blank(),
panel.grid=element_blank(),
plot.title=element_text(size=14, face="bold")
)
mutate(measles,
vacc_status=factor(vacc_status, #cambiamos el orden de las categorías
rev(levels(vacc_status))))%>%
ggplot(aes(1,prop,fill=vacc_status))+ #ponemos 1 en x para crear una barra única
geom_bar(stat="identity")+
scale_y_continuous(breaks=seq(0,1,.1),
labels=percent,
limits=c(0,1),
expand=c(.01,.01))+
scale_x_continuous(expand=c(0,0))+
scale_fill_brewer("",palette="Set1")+
coord_flip()+
theme_singlebar
#ampliamos los datos con las cifras de Italia
measles2 <- mutate(measles,
italy=c(0.826,0.081,0.053,0.013,0.027),
vacc_status=factor(vacc_status,rev(levels(vacc_status))))%>%
rename(europe="prop")%>%
gather(region,prop,europe:italy)
ggplot(measles2,aes(region,prop,fill=vacc_status))+
geom_bar(stat="identity",position="stack")+ #stack: columna 100%
scale_y_continuous(breaks=seq(0,1,.1),
labels=percent, #convertimos en %
limits=c(0,1),
expand=c(0,0))+
scale_fill_brewer(palette = "Set1")+
labs(x="",y="",fill="Vaccination Status")+
theme_minimal()
Gráfico de Waffle
#libería
library(waffle)
#la función de waffle usa un vector con nombres
val_measles <- round(measles$prop*100)
names(val_measles) <- measles$vacc_status
waffle(val_measles, #datos
colors=brewer.pal(5,"Set1"), #colores
rows=5) #número de filas
El gráfico de Waffle me parece muy interesante cuando queramos mostrar una proporción de una categoría individual.
medida <- c(41,59) #datos de la OECD 2015
names(medida) <- c("Estudios Superiores","Otros estudios")
waffle(medida,
colors=c("#377eb8","#bdbdbd"),
rows=5)
Mapa de arbol (treemap)
#librería
library(treemap)
treemap(measles,
index="vacc_status", #variable de categrías
vSize="prop", #valores
type="index", #estilo más en ?treemap
title="",
palette = brewer.pal(5,"Set1") #colores
)
Personalmente, creo que todos los tipos de representaciones gráficas tienen sus ventajas y desventajas. No obstante, en la actualidad tenemos una gran variedad de alternativas para evitar el uso del gráfico de tarta. Si aún así se quiere hacer un gráfico de tarta, algo que tampoco descartaría, recomiendo seguir ciertas reglas que ha resumido muy bien Lisa Charlotte Rost en un reciente post. Por ejemplo, debemos ordenar de mayor a menor a no ser que haya un orden natural o usar como máximo cinco categorías. Por último, os dejo un enlace a un cheatsheet de policyviz sobre normas básicas de visualización de datos. Una buena referencia sobre gráficos, usando diferentes programas desde Excel hasta R, podéis encontrar en Creating more effective graphs (Robbins 2013).