[Graphics] Visualizzazione dei dati più sottoutilizzata


Answers

I grafici che usano coordinate polari sono certamente sottoutilizzati - alcuni direbbero a ragione. Penso che le situazioni che giustificano il loro uso non sono comuni; Penso anche che quando si presentano queste situazioni, i grafici polari possono rivelare modelli nei dati che i grafici lineari non possono rivelare.

Penso che sia perché a volte i tuoi dati sono intrinsecamente polari piuttosto che lineari - ad esempio, è ciclico (le x-coordinate rappresentano i tempi durante il giorno di 24 ore su più giorni) oi dati sono stati precedentemente mappati su uno spazio polare.

Ecco un esempio. Questo grafico mostra il volume medio di traffico di un sito per ora. Notare le due punte alle 10 di sera e alle 1 del mattino. Per i tecnici di rete del sito, quelli sono significativi; è anche significativo che si manifestino l'uno vicino all'altro (a sole due ore di distanza). Ma se tracciate gli stessi dati su un sistema di coordinate tradizionale, questo schema sarebbe completamente nascosto - tracciato linearmente, questi due picchi sarebbero a 20 ore di distanza, che sono, anche se sono anche solo a due ore di distanza in giorni consecutivi. Il grafico polare sopra mostra questo in modo parsimonioso e intuitivo (una leggenda non è necessaria).

Ci sono due modi (di cui sono a conoscenza) per creare grafici come questo usando R (ho creato la trama sopra w / R). Uno è quello di codificare la propria funzione nei sistemi grafici di base o di griglia. L'altro modo, che è più facile, è usare il pacchetto circolare . La funzione che useresti è ' 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)
Question

Istogrammi e grafici a dispersione sono ottimi metodi per visualizzare i dati e la relazione tra le variabili, ma recentemente mi sono chiesto quali tecniche di visualizzazione mi mancano. Quale pensi che sia il tipo di trama più sottoutilizzato?

Le risposte dovrebbero:

  1. Non essere usato molto comunemente nella pratica.
  2. Essere comprensibile senza una grande quantità di discussioni di base.
  3. Essere applicabile in molte situazioni comuni.
  4. Includere codice riproducibile per creare un esempio (preferibilmente in R). Un'immagine collegata sarebbe carina.



Non dovremmo dimenticare la trama carina e (storicamente) importante di staminali e foglie (che anche Tufte ama!). Ottieni una panoramica numerica diretta della tua densità e forma dei dati (ovviamente se il tuo set di dati non è più grande di circa 200 punti). In R, la funzione stem produce il tuo dislay stelo e foglia (nello spazio di lavoro). Preferisco usare la funzione gstem dal pacchetto fmsb per disegnarlo direttamente in un dispositivo grafico. Di seguito è riportata una variazione della temperatura corporea del castoro (i dati devono essere inclusi nel set di dati predefinito) in una visualizzazione "stelo per foglia":

  require(fmsb)
  gstem(beaver1$temp)




Grafici a scatole! Esempio dalla guida R:

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

Secondo me è il modo più pratico per dare una rapida occhiata ai dati o per confrontare le distribuzioni. Per le distribuzioni più complesse esiste un'estensione chiamata vioplot .




Mi piacciono anche le modifiche apportate da Tufte ai boxplots che consentono di eseguire il confronto dei piccoli multipli molto più facilmente perché sono molto "sottili" in orizzontale e non ingombrano la trama con inchiostro ridondante. Tuttavia, funziona meglio con un numero piuttosto elevato di categorie; se ne hai solo pochi su una trama, i normali riquadri (Tukey) sembrano migliori perché hanno un po 'più di peso per loro.

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
  )

Altri modi di renderli (incluso l'altro tipo di boxplot Tufte) sono discussi in questa domanda .




Le trame di violini (che combinano grafici a scatola con densità del kernel) sono relativamente esotiche e piuttosto interessanti. Il pacchetto vioplot in R ti permette di renderli abbastanza facilmente.

Ecco un esempio (il collegamento di wikipedia mostra anche un esempio):




Scopri il lavoro di Edward Tufte e specialmente questo libro

Puoi anche provare a prendere la sua presentazione itinerante . È abbastanza buono e include un fascio di quattro dei suoi libri. (giuro che non possiedo le azioni del suo editore!)

A proposito, mi piace la sua tecnica di visualizzazione dei dati sparkline. Sorpresa! Google lo ha già scritto e lo ha pubblicato su Google Code




Se il tuo grafico a dispersione ha così tanti punti che diventa un disastro completo, prova una trama a dispersione lisciata. Ecco un esempio:

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

Il pacchetto hexbin (suggerito da @Dirk Eddelbuettel) viene utilizzato per lo stesso scopo, ma smoothScatter() ha il vantaggio di appartenere al pacchetto graphics e fa quindi parte dell'installazione R standard.




Links