Les histogrammes et les nuages de points sont d'excellentes méthodes de visualisation des données et de la relation entre les variables, mais récemment, je me suis demandé quelles techniques de visualisation me manquaient. Selon vous, quel est le type d'intrigue le plus sous-utilisé?
Les réponses doivent:
- Ne pas être très couramment utilisé dans la pratique.
- Soyez compréhensible sans beaucoup de discussion de fond.
- Être applicable dans de nombreuses situations courantes.
- Incluez du code reproductible pour créer un exemple (de préférence en R). Une image liée serait bien.
Réponses:
Je suis vraiment d'accord avec les autres affiches: les livres de Tufte sont fantastiques et valent la peine d'être lus.
Tout d'abord, je voudrais vous signaler un très bon tutoriel sur ggplot2 et ggobi de "Looking at Data" plus tôt cette année. Au-delà de cela, je soulignerais simplement une visualisation de R et deux packages graphiques (qui ne sont pas aussi largement utilisés que les graphiques de base, le treillis ou ggplot):
Cartes thermiques
J'aime beaucoup les visualisations qui peuvent gérer des données multivariées, en particulier des données de séries chronologiques. Les cartes thermiques peuvent être utiles pour cela. Un très joli a été présenté par David Smith sur le blog Revolutions . Voici le code ggplot gracieuseté 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)
Ce qui finit par ressembler un peu à ceci:
RGL: graphiques 3D interactifs
RGL , qui offre facilement la possibilité de créer des graphiques 3D interactifs, en vaut la peine . Il existe de nombreux exemples en ligne pour cela (y compris dans la documentation de rgl).
Le R-Wiki a un bel exemple de la façon de tracer des nuages de points 3D en utilisant rgl.
GGobi
Un autre paquet qui vaut la peine d'être connu est rggobi . Il y a un livre Springer sur le sujet , et beaucoup de bons documents / exemples en ligne, y compris le cours "Looking at Data" .
la source
J'aime beaucoup les dotplots et je trouve que lorsque je les recommande à d'autres pour des problèmes de données appropriés, ils sont invariablement surpris et ravis. Ils ne semblent pas être très utilisés et je ne comprends pas pourquoi.
Voici un exemple de Quick-R:
Je crois que Cleveland est le plus responsable du développement et de la promulgation de ceux-ci, et l'exemple de son livre (dans lequel des données défectueuses ont été facilement détectées avec un dotplot) est un argument puissant pour leur utilisation. Notez que l'exemple ci-dessus ne met qu'un point par ligne, alors que leur puissance réelle vient avec vous avez plusieurs points sur chaque ligne, avec une légende expliquant lequel est lequel. Par exemple, vous pouvez utiliser des symboles ou des couleurs différents pour trois moments différents, et ainsi facilement avoir une idée des modèles de temps dans différentes catégories.
Dans l'exemple suivant (fait dans Excel de toutes choses!), Vous pouvez clairement voir quelle catégorie a pu souffrir d'un échange d'étiquettes.
la source
Les graphiques utilisant des coordonnées polaires sont certainement sous-utilisés - certains diraient avec raison. Je pense que les situations qui justifient leur utilisation ne sont pas courantes; Je pense aussi que lorsque ces situations se présentent, les graphiques polaires peuvent révéler des modèles dans les données que les graphiques linéaires ne peuvent pas.
Je pense que c'est parce que parfois vos données sont intrinsèquement polaires plutôt que linéaires - par exemple, elles sont cycliques (coordonnées x représentant des heures pendant une journée de 24 heures sur plusieurs jours), ou les données ont déjà été mappées sur un espace polaire.
Voici un exemple. Ce graphique montre le volume de trafic moyen d'un site Web par heure. Remarquez les deux pointes à 22 h et à 1 h du matin. Pour les ingénieurs réseau du site, ceux-ci sont importants; il est également significatif qu'ils se produisent à proximité les uns des autres (à seulement deux heures d'intervalle). Mais si vous tracez les mêmes données sur un système de coordonnées traditionnel, ce modèle serait complètement masqué - tracé linéairement, ces deux pointes seraient espacées de 20 heures, ce qu'elles sont, bien qu'elles ne soient également qu'à deux heures d'intervalle sur des jours consécutifs. La carte polaire ci-dessus montre cela de manière parcimonieuse et intuitive (une légende n'est pas nécessaire).
Il y a deux façons (dont je suis conscient) de créer des tracés comme celui-ci en utilisant R (j'ai créé le tracé ci-dessus w / R). La première consiste à coder votre propre fonction dans les systèmes graphiques de base ou de grille. L'autre façon, qui est plus simple, est d'utiliser le paquet circulaire . La fonction que vous utiliseriez est ' 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)
la source
qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar()
Si votre nuage de points a tellement de points qu'il devient un désordre complet, essayez un nuage de points lissé. Voici un exemple:
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
Le
hexbin
paquet (suggéré par @Dirk Eddelbuettel) est utilisé dans le même but, maissmoothScatter()
a l'avantage qu'il appartient augraphics
paquet, et fait donc partie de l'installation standard de R.la source
En ce qui concerne sparkline et autre idée Tufte, le package YaleToolkit sur CRAN fournit des fonctions
sparkline
etsparklines
.Un autre package utile pour les ensembles de données plus volumineux est hexbin, car il `` classe '' intelligemment les données dans des compartiments pour traiter des ensembles de données qui peuvent être trop volumineux pour des nuages de points naïfs.
la source
plot
over dans une mise à jour de ma question , avec l'aide de ce message du forum TufteHmisc::latex()
version de sortie deHmisc::describe
inclut un mini-histogramme qui est inclus dans le tableau.Les parcelles de violon (qui combinent des boîtes à moustaches avec une densité de noyau) sont relativement exotiques et plutôt cool. Le vioplot package dans R vous permet de les créer assez facilement.
Voici un exemple (le lien wikipedia montre également un exemple):
la source
bwplot(... panel = panel.violin)
Une autre belle visualisation de séries chronologiques que je viens de passer en revue est le "graphique en relief" (tel que présenté dans cet article sur le blog "Learning R" ). Ceci est très utile pour visualiser les changements de position dans le temps.
Vous pouvez lire comment le créer sur http://learnr.wordpress.com/ , mais voici à quoi il finit par ressembler:
la source
J'aime aussi les modifications des boîtes à moustaches de Tufte qui vous permettent de faire de petites comparaisons multiples beaucoup plus facilement car elles sont très "minces" horizontalement et n'encombrent pas l'intrigue avec de l'encre redondante. Cependant, cela fonctionne mieux avec un assez grand nombre de catégories; si vous n'en avez que quelques-uns sur une parcelle, les boîtes à moustaches régulières (Tukey) ont une meilleure apparence car elles ont un peu plus de poids.
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 )
D'autres façons de les faire (y compris l'autre type de boîte à moustaches Tufte) sont discutées dans cette question .
la source
Nous ne devons pas oublier la parcelle de tiges et de feuilles mignonne et (historiquement) importante (que Tufte aime aussi!) Vous obtenez un aperçu directement numérique de la densité et de la forme de vos données (bien sûr, si votre ensemble de données n'est pas plus grand, environ 200 points). Dans R, la fonction
stem
produit votre affichage tige et feuille (dans l'espace de travail). Je préfère utiliser lagstem
fonction du package fmsb pour le dessiner directement dans un périphérique graphique. Vous trouverez ci-dessous une variance de la température corporelle du castor (les données doivent être dans votre ensemble de données par défaut) dans un affichage tige par feuille:require(fmsb) gstem(beaver1$temp)
la source
Graphiques d'horizon (pdf), pour visualiser plusieurs séries temporelles à la fois.
Tracés de coordonnées parallèles (pdf), pour l'analyse multivariée.
Diagrammes d' association et de mosaïque , pour visualiser les tableaux de contingence (voir le package vcd )
la source
En plus de l'excellent travail de Tufte, je recommande les livres de William S. Cleveland: Visualizing Data and The Elements of Graphing Data . Non seulement ils sont excellents, mais ils ont tous été réalisés en R, et je crois que le code est accessible au public.
la source
Boîtes à moustaches! Exemple de l'aide R:
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
À mon avis, c'est le moyen le plus pratique de jeter un coup d'œil rapide sur les données ou de comparer les distributions. Pour les distributions plus complexes, il existe une extension appelée
vioplot
.la source
Les parcelles en mosaïque me semblent répondre aux quatre critères mentionnés. Il y a des exemples dans r, sous mosaicplot.
la source
Découvrez le travail d'Edward Tufte et en particulier ce livre
Vous pouvez également essayer de voir sa présentation itinérante . C'est assez bon et comprend un paquet de quatre de ses livres. (je jure que je ne possède pas le stock de son éditeur!)
Au fait, j'aime sa technique de visualisation de données sparkline. Surprise! Google l'a déjà écrit et l'a publié sur Google Code
la source
Des graphiques récapitulatifs? Comme mentionné dans cette page:
Visualisation des statistiques récapitulatives et de l'incertitude
la source