Visualización de datos más infrautilizada [cerrado]


Los histogramas y las gráficas de dispersión son excelentes métodos para visualizar datos y la relación entre variables, pero recientemente me he estado preguntando qué técnicas de visualización me estoy perdiendo. ¿Cuál crees que es el tipo de parcela más infrautilizada?

Las respuestas deben:

  1. No debe utilizarse con mucha frecuencia en practicar.
  2. Ser comprensible sin mucho de antecedentes.
  3. Ser aplicable en muchas situaciones comunes.
  4. Incluir código reproducible crear un ejemplo (preferiblemente en R). Una imagen enlazada sería agradable.
Author: Ian Fellows , 2010-01-16

15 answers

Realmente estoy de acuerdo con los otros carteles: Los libros de Tufte son fantásticos y bien vale la pena leerlos.

En primer lugar, me gustaría señalar a un muy buen tutorial sobre ggplot2 y ggobi de "Mirando los datos" a principios de este año. Más allá de eso, solo destacaría una visualización de R y dos paquetes de gráficos (que no son tan utilizados como base graphics, lattice o ggplot):

Mapas De Calor

Me gustan mucho las visualizaciones que pueden manejar datos multivariantes, especialmente datos de series temporales. Los mapas de calor pueden ser útiles para esto. Uno realmente limpio fue presentado por David Smith en el blog de Revoluciones . Aquí está el código ggplot cortesía de Hadley:

stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
                stock, "&a=", substr(start.date,6,7),
                "&b=", substr(start.date, 9, 10),
                "&c=", substr(start.date, 1,4), 
                "&d=", substr(end.date,6,7),
                "&e=", substr(end.date, 9, 10),
                "&f=", substr(end.date, 1,4),
                "&g=d&ignore=.csv", sep="")    
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
  week = as.POSIXlt(Date)$yday %/% 7 + 1,
  wday = as.POSIXlt(Date)$wday,
  year = as.POSIXlt(Date)$year + 1900)

library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) + 
  geom_tile(colour = "white") + 
  scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) + 
  facet_wrap(~ year, ncol = 1)

Que termina pareciendo algo como esto:

texto alt

RGL: Gráficos 3D interactivos

Otro paquete que vale la pena el esfuerzo de aprender es RGL, que proporciona fácilmente la capacidad de crear gráficos interactivos en 3D. Hay muchos ejemplos en línea para esto (incluso en la documentación de rgl).

El R-Wiki tiene un buen ejemplo de cómo trazar diagramas de dispersión 3D usando rgl.

GGobi

Otro paquete que vale la pena conocer es rggobi. Hay un libro de Springer sobre el tema , y un montón de gran documentación/ejemplos en línea, incluyendo en el curso "Mirando los datos".

 86
Author: Shane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 14:19:43

Las parcelas que usan coordenadas polares ciertamente están subutilizadas some algunos dirían con buena razón. Creo que las situaciones que justifican su uso no son comunes; también creo que cuando surgen esas situaciones, patrones polares puede revelar patrones en los datos que tramas lineales no.

Creo que eso es porque a veces sus datos son inherentemente polares en lugar de lineales eg por ejemplo, es cíclico (x-coordenadas que representan tiempos durante el día de 24 horas durante varios días), o los datos fueron previamente mapeado en un espacio de entidades polares.

Aquí hay un ejemplo. Esta gráfica muestra el volumen medio de tráfico de un sitio web por hora. Observe los dos picos a las 10 pm y a la 1 am. Para los ingenieros de red del Sitio, esos son significativos; también es significativo que ocurran cerca uno del otro (solo dos horas de diferencia). Pero si se trazan los mismos datos en un sistema de coordenadas tradicional, este patrón estaría completamente oculto pl trazados linealmente, estos dos picos serían 20 horas de diferencia, que son, aunque también son solo dos horas de diferencia en días consecutivos. El gráfico polar de arriba muestra esto de una manera parsimoniosa e intuitiva (una leyenda no es necesaria).

Gráfico polar que muestra el tráfico del sitio, con picos en las horas 1 y 22

Hay dos maneras (de las que soy consciente) de crear parcelas como esta usando R (Creé la parcela anterior w/ R). Uno es codificar su propia función en los sistemas gráficos base o grid. Ellos otra manera, que es más fácil, es utilizar el paquete circular. La función que usarías es ' rose.diag':

data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26, 
                 19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"), 
                   brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)
 56
Author: doug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-26 15:52:35

Realmente me gustan dotplots y encuentro que cuando los recomiendo a otros para problemas de datos apropiados, invariablemente están sorprendidos y encantados. No parecen tener mucho uso, y no puedo entender por qué.

Aquí hay un ejemplo de Quick-R: dotplot en los datos del coche

Creo que Cleveland es el más responsable del desarrollo y la promulgación de estos, y el ejemplo en su libro (en el que los datos defectuosos se detectaron fácilmente con un dotplot) es un argumento poderoso para su uso. Nota que el ejemplo anterior solo pone un punto por línea, mientras que su poder real viene con usted tiene múltiples puntos en cada línea, con una leyenda que explica cuál es cuál. Por ejemplo, puede usar diferentes símbolos o colores para tres puntos de tiempo diferentes, y de ahí obtener fácilmente una idea de los patrones de tiempo en diferentes categorías.

En el siguiente ejemplo (hecho en Excel de todas las cosas!), puede ver claramente qué categoría podría haber sufrido un cambio de etiqueta.

Dotplot con 2 grupos

 53
Author: Ari B. Friedman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-29 11:48:54

Si su gráfico de dispersión tiene tantos puntos que se convierte en un desastre completo, pruebe con un gráfico de dispersión suavizado. He aquí un ejemplo:

library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot

El paquete hexbin (sugerido por @Dirk Eddelbuettel) se usa para el mismo propósito, pero smoothScatter() tiene la ventaja de que pertenece al paquete graphics, y por lo tanto es parte de la instalación estándar de R.

Smiley como un diagrama de dispersión regular o suavizado

 52
Author: nullglob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-15 12:56:25

Con respecto a sparkline y otras ideas de Tufte, el paquete YaleToolkit en CRAN proporciona funciones sparkline y sparklines.

Otro paquete que es útil para conjuntos de datos más grandes es hexbin ya que inteligentemente 'almacena' datos en cubos para tratar con conjuntos de datos que pueden ser demasiado grandes para gráficos de dispersión ingenuos.

 30
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-16 17:30:50

Las parcelas de violín (que combinan las parcelas de caja con la densidad del núcleo) son relativamente exóticas y bastante geniales. El paquete vioplot en R le permite hacerlos con bastante facilidad.

Aquí hay un ejemplo (el enlace de wikipedia también muestra un ejemplo):

introduzca la descripción de la imagen aquí

 27
Author: Jason Sundram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-03 03:22:43

Otra buena visualización de series temporales que acabo de revisar es el "gráfico de baches" (como aparece en este post en el blog "Learning R" ). Esto es muy útil para visualizar cambios en la posición a lo largo del tiempo.

Puedes leer sobre cómo crearlo en http://learnr.wordpress.com / , pero esto es lo que termina pareciendo:

texto alt

 24
Author: Shane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 14:20:02

También me gustan las modificaciones de las gráficas de caja de Tufte que le permiten hacer comparaciones de múltiplos pequeños mucho más fácilmente porque son muy "delgadas" horizontalmente y no desordenan la gráfica con tinta redundante. Sin embargo, funciona mejor con un número bastante grande de categorías; si solo tienes unas pocas en una trama, las gráficas de caja regulares (Tukey) se ven mejor ya que tienen un poco más de peso.

library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick, 
  data.frame=cw , 
  main = "Chick Weights",
  box.show.mean=FALSE,
  box.show.whiskers=FALSE,
  box.show.box=FALSE
  )

compareplot

Otras formas de hacer estos (incluyendo el otro tipo de Tufte boxplot) son discutido en esta pregunta.

 19
Author: Ari B. Friedman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:56

Horizon graphs (pdf), para visualizar muchas series temporales a la vez.

Gráficas de coordenadas paralelas (pdf), para análisis multivariado.

Diagramas de asociación y mosaico , para visualizar tablas de contingencia (ver el paquete vcd)

 18
Author: Richie Cotton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-18 17:48:48

No debemos olvidarnos de la trama linda e (históricamente) importante de tallo y hoja (¡que Tufte también ama!). Se obtiene una visión general numérica directa de la densidad y la forma de los datos (por supuesto, si su conjunto de datos no es más grande que unos 200 puntos). En R, la función stem produce la dislocación del tallo y la hoja (en el espacio de trabajo). Prefiero usar la función gstem del paquete fmsb para dibujarlo directamente en un dispositivo gráfico. A continuación se muestra una variación de la temperatura corporal del castor (los datos deben estar en su defecto conjunto de datos) en una visualización tallo por hoja:

  require(fmsb)
  gstem(beaver1$temp)

introduzca la descripción de la imagen aquí

 17
Author: Geek On Acid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-21 00:03:02

Además del excelente trabajo de Tufte, recomiendo los libros de William S. Cleveland: Visualizando Datos y Los Elementos de Graficar Datos. No solo son excelentes, sino que todos se hicieron en R, y creo que el código está disponible públicamente.

 15
Author: Peter Flom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-17 21:27:03

Boxplots! Ejemplo de la ayuda de R:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

En mi opinión, es la forma más práctica de echar un vistazo rápido a los datos o comparar distribuciones. Para distribuciones más complejas existe una extensión llamada vioplot.

 14
Author: mbq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-21 22:39:07

Las parcelas de mosaico me parecen cumplir con los cuatro criterios mencionados. Hay ejemplos en r, bajo mosaicplot.

 11
Author: Peter Flom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-17 21:22:14

Echa un vistazo a la obra de Edward Tufte y especialmente este libro

También puedes intentar ver su presentación itinerante. Es bastante bueno e incluye un paquete de cuatro de sus libros. (¡juro que no soy dueño de las acciones de su editor!)

Por cierto, me gusta su técnica de visualización de datos Sparkline. Sorpresa! Google ya lo ha escrito y lo ha publicado en Google Code
 10
Author: Paul Sasik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-16 06:09:17

¿Gráficos resumidos? Como se menciona en esta página:

Visualización de Estadísticas de Resumen e Incertidumbre

 1
Author: Gökhan Sever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-28 23:28:43