Etiquetas

, , , , , , , ,

The visual display of quantitative information es el título de un libro clásico escrito por Edward Tufte. Así empieza su primer capítulo:

La excelencia en los gráficos estadísticos consiste en comunicar ideas complejas con claridad, precisión y eficiencia. Los gráficos debieran: mostrar la información; inducir al observador a pensar en la sustancia más que en la metodología, el diseño gráfico, la tecnología empleada para producir el gráfico o en cualquier otra cosa; evitar distorsionar lo que los datos tienen que decir; mostrar muchos números en un pequeño espacio; dar coherencia a grandes conjuntos de información; animar al ojo a comparar diferentes partes de la información; mostrar la información con varios niveles de detalle, desde una visión global hasta la estructura interna; servir a un propósito razonablemente claro, sea este la descripción, exploración, tabulación o decoración; estar integrado con las descripciones estadísticas y textuales de un conjunto de información.

Entre las muchas joyas que guarda este libro comentaré lo que Tufte llama «small multiples«:

La misma estructura de diseño gráfico se repite en cada una de los cuadros. Son económicos: una vez que el observador comprende el diseño de uno de los cuadros, tiene acceso inmediato a la información del resto. Así, según el ojo viaja de un cuadro a los siguientes, la constancia en el diseño permite al observador concentrarse en los cambios presentes en la información y no tanto en los cambios en el diseño gráfico.

Recordé a los «small multiples» después de leer este artículo: Time on the horizon. Describe lo que llama gráfico de horizonte (horizon graph). Su utilidad consiste en mostrar la evolución temporal simultánea de un elevado número de series diferentes. La originalidad de este gráfico consiste en comprimir el eje Y utilizando un código de colores divergente para así poder representar muchas series apiladas. Dado que la estructura del diseño de la representación de cada una de las series se repite, es fácil (después de comprender el diseño) comparar el comportamiento conjunto de las series temporales. (En este artículo analizan con métodos estadísticos la mejora en la percepción visual con este tipo de gráficos).

Su utilidad se comprende mejor con un ejemplo. Analizaremos las fluctuaciones de la radiación solar diaria en Madrid. Utilizaré R-project, mi paquete solaR, el paquete zoo y el paquete latticeExtra:


library(solaR)
library(zoo)
library(latticeExtra)

En primer lugar obtenemos los datos de irradiación global diaria en el plano horizontal desde el 2004 hasta el 2009 de las estaciones meteorológicas de Madrid disponibles en MAPA/SIAR. El resultado lo transformamos en serie temporal mediante la función zoo.

data(RedEstaciones)
mapa.subset=subset(RedEstaciones, NomProv=='Madrid')

rad=data.frame()
for (i in mapa.subset$Estacion) {
 x<-LeeMAPA(Estacion=i,Provincia=28, FechaInicio='01/01/2004', FechaFinal='31/12/2009')
 rad<-rbind(rad, data.frame(Fecha=x$Fecha, G=x$G/1000, est=i))}#conversión a kWh

tozoo <- function(x) zoo(x$G, as.Date(x$Fecha, format='%d/%m/%Y'))

rad.zoo <- do.call(merge, lapply(split(rad, rad$est), tozoo))

names(rad.zoo)<-mapa.subset$NomEst

#Los NA dan problemas con horizonplot
coredata(rad.zoo)[is.na(coredata(rad.zoo))]<-0

Representemos de forma convencional la evolución de las fluctuaciones estas series durante el año 2009.


rad.zoo.2009<-window(rad.zoo, start=as.Date("2009-1-1"))

xyplot(diff(rad.zoo.2009), layout=c(1,7))

Es difícil comparar el comportamiento con esta forma de representación. Para observar mejor, utilizaremos la función horizonplot del paquete latticeExtra. Utilizo un código de colores que representa las fluctuaciones negativas de mayor intensidad con un color rojo oscuro, mientras que las fluctuaciones positivas de mayor intensidad aparecen con un color azul oscuro.  Además, empleo la misma escala para todas las estaciones. De esta forma, es posible identificar las valores anómalos mediante la comparativa visual con el conjunto.


horizonplot(diff(rad.zoo.2009), layout=c(1,7), origin=0,
 col.regions=brewer.pal(n=11, name='RdBu'),
 scales = list(y = list(relation = "same")))

Ahora, en lugar de comparar la evolución de la radiación de diferentes estaciones, represento la evolución de la radiación en la estación de Aranjuez durante todo el período de estudio, mostrando cada año en uno de los «small multiples«.

horizonplot(diff(rad.zoo$Aranjuez),
 cut=list(n=6, overlap=0),
 origin=0,
 col.regions=brewer.pal(n=11, name='RdBu'),
 strip.left=FALSE,
 scales = list(y = list(relation = "same", draw=FALSE)))+
 layer(grid::grid.text(format(x[1], "%Y"), x = 0, just = "left"))