Boxplot dla kilku dystrybucji?

9

Muszę narysować 20 rozkładów na jednym wykresie w R i nie wygląda mi to dobrze (zaśmiecone) przy zwykłym wykresie pudełkowym (20 pudełek), nawet przy boxwex = 0,3. Czy mógłbyś mi zasugerować, w jaki sposób mogę wykreślić rodzaj wykresu ramkowego w R dla 20 rozkładów, z kropkami jako medianą i tylko linią zamiast pola, jak ten poniżej. Proszę również zasugerować mi, czy istnieje jakaś metoda R, która produkuje ładne wykresy pudełkowe, szczególnie jeśli chcesz pokazać kilka rozkładów na jednym wykresie.

 -----0----
samarasa
źródło

Odpowiedzi:

12

(To jest naprawdę komentarz, ale ponieważ wymaga ilustracji, musi zostać opublikowany jako odpowiedź).

Ed Tufte przeprojektował wykres pudełkowy w swoim Wizualnym wyświetlaniu informacji ilościowych (s. 125, pierwsze wydanie 1983) właśnie w celu umożliwienia „nieformalnej, eksploracyjnej analizy danych, w której czas pracownika badawczego należy poświęcić na sprawy inne niż rysowanie linii”. Rozszerzyłem (w sposób całkowicie naturalny) jego przeprojektowanie, tak aby uwzględniało odstające rysunki w tym przykładzie, pokazując 70 równoległych wykresów pudełkowych:

Wykresy pudełkowe Tufte

Mogę wymyślić kilka sposobów dalszej poprawy tego, ale jest to charakterystyczne dla tego, co można wytworzyć w trakcie eksploracji złożonego zestawu danych: jesteśmy zadowoleni z wizualizacji, które pozwalają nam zobaczyć dane; dobra prezentacja może przyjść później.

Porównaj to z konwencjonalnym odwzorowaniem tych samych danych:

Konwencjonalne wykresy pudełkowe

Tufte przedstawia kilka innych przeprojektowań opartych na swojej zasadzie „maksymalizacji współczynnika atramentu danych”. Ich wartość polega na zilustrowaniu, w jaki sposób ta zasada może pomóc nam zaprojektować skuteczną grafikę eksploracyjną. Jak widać, mechanika ich kreślenia polega na znalezieniu dowolnej platformy graficznej, w której można rysować znaczniki punktów i linie.

Whuber
źródło
Czy mógłbyś pomóc w narysowaniu górnego wykresu w R?
samarasa,
1
@kkp Oto przybliżony szkic . Dobra odpowiedź (+1).
chl
A oto dalsze możliwości w R - znalezione w SO: Funkcje dostępne dla wykresów pudełkowych Tufte w R? .
chl
@chl Dziękujemy za link. Dla przypomnienia, zawiera działający kod R do tworzenia tych przeprojektowanych wykresów pudełkowych. Co ciekawe, pytanie to zostało opublikowane zaledwie trzy dni po tym ...
whuber
1
@naught Ciekawe obserwacje. Jednym z potencjalnych zastosowań takich wykresów pudełkowych jest wariant „wędrownego wykresu schematu” Tukeya, w którym (duży) wykres rozrzutu jest krojony wzdłuż współrzędnej x, a wartości y są podsumowywane przez wykres skrzynek w każdym przedziale. Taka procedura może z łatwością wygenerować 70 lub więcej równoległych wykresów pudełkowych. Zastosowania obejmują prawie wszystkie dane wielowymiarowe: na przykład współrzędna x może reprezentować głębokość gleby próbkowaną co centymetr, a współrzędna y może reprezentować dane uzyskane w wielu lokalizacjach.
whuber
10

Beanplots

Prawdopodobnie najfajniejsze wątki, jakie kiedykolwiek powstały, są w zasadzie implementacją wątków skrzypcowych w małych wielokrotnościach. Wykresy skrzypcowe mają ogromną przewagę nad wykresami skrzynkowymi: mogą pokazywać znacznie więcej szczegółów dla rozkładów, które nie są normalne (np. Mogą naprawdę dobrze pokazywać rozkłady bimodalne). Ponieważ są one zwykle oparte na wygładzaniu Gaussa (lub podobnym), nie będą działać naprawdę dobrze dla rozkładów z punktami końcowymi (np. Rozkładów wykładniczych), ale też nie będą rysować pudełkowo.

Beanplots można bardzo łatwo osiągnąć w R - wystarczy zainstalować pakiet 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!

Ta beanplotfunkcja ma mnóstwo opcji , dzięki czemu możesz dostosować ją do swoich potrzeb. Istnieje również sposób wykonywania beanplots w ggplot2 (potrzebujesz najnowszej wersji):

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')

GGplot2 beanplot

naught101
źródło
3

Oto przykładowy kod R na kilka sposobów, aby to zrobić, prawdopodobnie będziesz chciał to rozwinąć (w tym etykiety itp.) I być może zamienić go w funkcję:

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) )

wprowadź opis zdjęcia tutaj

Greg Snow
źródło