Pregunta

Los histogramas y gráficos de dispersión son grandes métodos de visualización de datos y la relación entre las variables, pero recientemente se han preguntado acerca de qué técnicas de visualización me faltan. ¿Qué cree usted que es el tipo más infrautilizado de la trama?

Las respuestas deben:

  1. No se utiliza con mucha frecuencia en la práctica.
  2. ser comprensible sin una gran cantidad de fondo discusión.
  3. ser aplicables en muchas situaciones comunes.
  4. Incluir código reproducibles para crear un ejemplo (preferiblemente en R). Una imagen vinculada sería agradable.
¿Fue útil?

Solución

Me acuerdo con los otros carteles: libros de Tufte son fantásticos y bien vale la pena leer.

En primer lugar, me gustaría señalar que a muy buen tutorial sobre ggplot2 y ggobi de "en cuanto a los datos" a principios de este año. Más allá de eso me acaba de resaltar una visualización de R, y dos paquetes de gráficos (que no se utilizan tan ampliamente como gráficos de base, enrejado, o ggplot):

Mapas de calor

A mi me gusta visualizaciones que pueden manejar datos multivariados, especialmente los datos de series de tiempo. Los mapas de calor pueden ser útiles para esto. Uno realmente puro se caracteriza por David Smith en el blog de revoluciones . Aquí está el código de cortesía ggplot 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 pareciéndose a esto:

text alt

RGL: Gráficos Interactivos 3D

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

El R-Wiki tiene un buen ejemplo de cómo trazar gráficos de dispersión en 3D utilizando RGL.

GGobi

Otro paquete que vale la pena conocer es rggobi . Hay un libro sobre el tema Springer , y un montón de grandes ejemplos de documentación / en línea, incluso a < a href = "http://lookingatdata.com/jsm-2009/" rel = "noreferrer"> "en cuanto a los datos" curso.

Otros consejos

A mi me gusta dotplots y encontrar cuando les recomiendo a otros por los problemas de datos apropiados que son invariablemente sorprendidos y encantados. Ellos no parecen tener mucho uso, y no puedo entender por qué.

Este es un ejemplo de Quick-R: diagrama de puntos en los datos del coche

Creo Cleveland es más responsable de la elaboración y promulgación de estos, y el ejemplo en su libro (en el que los datos erróneos se detectó fácilmente con un gráfico de puntos) es un poderoso argumento a favor de su uso. Tenga en cuenta que el ejemplo anterior sólo pone un punto por línea, mientras que su verdadero poder viene con tiene varios puntos en cada línea, con una leyenda que explica cuál es cuál. Por ejemplo, podría utilizar diferentes símbolos o colores por tres puntos diferentes de tiempo, y de allí fácilmente tener una idea de los patrones de tiempo en diferentes categorías.

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

Dotplot con 2 grupos

Las parcelas utilizando coordenadas polares son sin duda infrautilizados - algunos dirían con razón. Creo que las situaciones que justifican su uso no son comunes; También creo que cuando surgen estas situaciones, diagramas polares pueden revelar patrones en los datos que lineal parcelas no pueden.

Creo que es porque a veces los datos son inherentemente polar en lugar de lineal - por ejemplo, es cíclicos (coordenadas x veces que representan durante el día de 24 horas durante varios días), o los datos eran previamente mapeado en un espacio de características polar.

Este es un ejemplo. Este gráfico muestra el volumen de tráfico medio de un sitio web por hora. Fíjese en las dos picos a las 10 pm y la 1 am. Para los ingenieros de la red del sitio, esos son significativos; también es importante que se producen cerca el uno al otro (otros simplemente dos horas de diferencia). Pero si se trazan los mismos datos en un sistema de coordenadas tradicional, este patrón sería completamente oculto - trazado lineal, estos dos picos serían 20 horas de diferencia, que son, a pesar de que también son sólo 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 necesario).

tráfico gráfico que muestra sitio Polar, con picos en horas 1 y 22

Hay dos maneras (que yo sepa) para crear parcelas de este tipo usando R (creé el gráfico de arriba w / R). Una de ellas es el código de su propia función en sistemas gráficos, ya sea la base o la red. Que de otra manera, lo que es más fácil, es utilizar el paquete circular . La función que utilizaría 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)

Si el gráfico de dispersión tiene tantos puntos que se convierte en un completo desastre, trate de 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 utiliza para el mismo propósito, pero smoothScatter() tiene la ventaja de que pertenece al paquete graphics, y por tanto es parte de la instalación R estándar.

Smiley como un gráfico de dispersión regular o suavizada

paquete

En cuanto a minigráfico y otra idea Tufte, el YaleToolkit en CRAN proporciona funciones sparkline y sparklines.

Otro paquete que es útil para grandes conjuntos de datos es hexbin ya que los datos inteligentemente 'bins' en los cubos para hacer frente a los conjuntos de datos que pueden ser demasiado grandes para los diagramas de dispersión ingenuos.

Violín parcelas (que combinan gráficos de caja con la densidad del núcleo) son relativamente exótico y muy bien. El vioplot paquete en I le permite hacer ellos con bastante facilidad.

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

introducir descripción de la imagen aquí

Otra buena visualización de series de tiempo que sólo estaba revisando es el "golpe gráfico de" (tal como se presenta en este post sobre el "aprendizaje R" blog de ) . Esto es muy útil para visualizar los cambios de posición con el tiempo.

Usted puede leer acerca de cómo crear en http://learnr.wordpress.com/ , pero esto es lo que termina pareciéndose a:

text alt

También me gusta modificaciones de gráficos de caja, que le permiten hacer la comparación pequeños múltiplos mucho más fácilmente porque son muy "fina" en horizontal y no el desorden de la trama redundante con tinta de Tufte. Sin embargo, funciona mejor con un número bastante grande de categorías; Si sólo tienes unos pocos en una parcela de los diagramas de caja (Tukey) regulares verse mejor ya que tienen un poco más de peso para ellos.

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 que estos (incluyendo otro tipo de diagrama de caja Tufte) son discutido en esta pregunta .

gráficos

Horizon (pdf), para la visualización de muchas series de tiempo a la vez.

paralelo coordina parcelas (pdf), para el análisis multivariante.

Asociación y parcelas mosaico , para la visualización de tablas de contingencia (ver la VCD paquete )

No debemos olvidar de lindo y (históricamente) diagrama de tallo y hojas importante (Tufte que ama también!). Se obtiene una visión general directamente numérico de la densidad y la forma (por supuesto, si el conjunto de datos no es más grande que unos 200 puntos) le datos. En R, la stem función produce su dislay de tallo y hoja (en espacio de trabajo). Yo prefiero usar la función gstem del paquete FMSB para dibujar directamente en un dispositivo gráfico. A continuación se muestra una variación de la temperatura corporal castor (los datos deben estar en el conjunto de datos predeterminado) en un diagrama de tallo de hojas:

  require(fmsb)
  gstem(beaver1$temp)

introducir descripción de la imagen aquí

Además de la excelente obra de Tufte, recomiendo los libros de William S. Cleveland: Visualización de datos y Elementos de la gráfica de datos . No sólo son excelentes, pero todos fueron hechos en I, y creo que el código está disponible al público.

Boxplots! Ejemplo de la ayuda R:

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

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

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

Comprobar la obra de Edward Tufte y especialmente este libro

También puede tratar de atrapar su exposición itinerante . Es muy bueno e incluye un paquete de cuatro de sus libros. (Juro que no son propietarios de las acciones de su editor!)

Por cierto, me gusta su técnica de visualización de datos minigráfico. ¡Sorpresa! Google ya está escrita y ponerlo fuera en Google Code

Gráficos de resumen? Como se ha mencionado en esta página:

Visualización de estadísticos de resumen y la incertidumbre

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top