Boxplot per diverse distribuzioni?


9

Ho bisogno di disegnare 20 distribuzioni in un singolo grafico in R, e non mi sembra buono (ingombra) con un normale diagramma a scatole (20 caselle) anche con boxwex = 0,3. Potresti suggerirmi come posso tracciare una specie di boxplot in R per le 20 distribuzioni, con punti per la mediana e solo una linea anziché la scatola, come quella qui sotto. Per favore, suggeriscimi anche se esiste un metodo R che produce simpatici grafici a scatole, in particolare se vuoi mostrare diverse distribuzioni in un singolo grafico.

 -----0----

Risposte:


12

(Questo è davvero un commento, ma poiché richiede un'illustrazione deve essere pubblicato come risposta.)

Ed Tufte ha ridisegnato il diagramma a scatole nel suo Visual Display of Quantitative Information (p. 125, Prima edizione 1983) proprio per consentire "analisi informale ed esplorativa dei dati, in cui il tempo del ricercatore dovrebbe essere dedicato a questioni diverse dalle linee di disegno". Ho (in modo perfettamente naturale) esteso la sua riprogettazione per adattarsi ai valori anomali del disegno in questo esempio mostrando 70 grafici a scatole parallele:

Tufte boxplots

Posso pensare a diversi modi per migliorarlo ulteriormente, ma è caratteristico di ciò che si potrebbe produrre nel calore dell'esplorazione di un set di dati complesso: siamo contenti di realizzare visualizzazioni che ci permettono di vedere i dati; una buona presentazione può venire dopo.

Confronta questo con una rappresentazione convenzionale degli stessi dati:

Box convenzionali

Tufte presenta molte altre riprogettazioni basate sul suo principio di "massimizzare il rapporto dell'inchiostro dei dati". Il loro valore sta nell'illustrare come questo principio possa aiutarci a progettare una grafica esplorativa efficace. Come puoi vedere, la meccanica per tracciarli equivale a trovare qualsiasi piattaforma grafica in cui puoi disegnare marcatori e linee.


Potresti aiutare a disegnare il grafico in alto in R?
samarasa,

1
@kkp Ecco una bozza approssimativa . Bella risposta (+1).
chl

E qui ci sono ulteriori possibilità in R - trovate su SO: Funzioni disponibili per i box box Tufte in R? .
chl,

@chl Grazie per il link. Per la cronaca, include il codice R funzionante per la produzione di questi grafici a scatole riprogettati. È interessante notare che questa domanda è stata pubblicata solo tre giorni dopo questa ...
whuber

1
@naught Osservazioni interessanti. Un potenziale uso di tali grafici a scatole è una variante del "diagramma schematico errante" di Tukey in cui un diagramma a dispersione (grande) viene suddiviso lungo la coordinata x e i valori y sono riassunti da un diagramma a scatole in ciascun contenitore. Tale procedura può facilmente generare 70 o più grafici a scatole affiancate. Le applicazioni includono quasi tutti i dati multidimensionali: ad esempio, la coordinata x potrebbe rappresentare una profondità del suolo campionata ogni centimetro e la coordinata y potrebbe rappresentare i dati ottenuti in più posizioni.
whuber

10

Beanplots

Probabilmente le trame più belle di sempre, queste sono fondamentalmente un'implementazione in piccoli multipli di trame di violino. Le trame di violino hanno un enorme vantaggio rispetto ai boxplot: possono mostrare molti più dettagli per le distribuzioni che non sono normali (ad esempio, possono mostrare davvero bene le distribuzioni bimodali). Dato che di solito si basano sul livellamento gaussiano (o simile), non funzioneranno molto bene per le distribuzioni con punti di fascia alta (come le distribuzioni esponenziali), ma nemmeno i grafici a trama.

I beanplot possono essere raggiunti molto facilmente in R - basta installare il pacchetto beanplot :

library(beanplot)

# Sampling code from Greg Snow's answer:
my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

beanplot(my.dat)

Beanplot!

La beanplotfunzione ha tonnellate di opzioni , quindi puoi personalizzarla in base al desiderio del tuo cuore. C'è anche un modo per creare beanplot in ggplot2 (è necessaria l'ultima versione):

library(ggplot2)

my.dat <- lapply(1:20, function(x) rnorm(x+10, sample(10, 1), sample(3,1)))
my.df <- melt(my.dat)
ggplot(my.df, aes(x=L1, y=value, group=L1)) + geom_violin(trim=FALSE) +
  geom_segment(aes(x=L1-0.1, xend=L1+0.1, y=value, yend=value), colour='white')

Beanplot GGplot2


3

Ecco un codice R di esempio per un paio di modi per farlo, probabilmente vorrai espandere questo (includere etichette ecc.) E magari trasformarlo in una funzione:

my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

tmp <- boxplot(my.dat, plot=FALSE, range=0)

# box and median only
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[2,], seq_along(my.dat), tmp$stats[4,] )
points( tmp$stats[3,], seq_along(my.dat) )

# wiskers and implied box
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[1,], seq_along(my.dat), tmp$stats[2,] )
segments( tmp$stats[4,], seq_along(my.dat), tmp$stats[5,] )
points( tmp$stats[3,], seq_along(my.dat) )

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.