Boxplot für mehrere Distributionen?

9

Ich muss 20 Verteilungen in einem einzelnen Diagramm in R zeichnen, und es sieht für mich mit normalem Boxplot (20 Boxen) selbst mit Boxwex = 0,3 nicht gut (überladen) aus. Könnten Sie mir vorschlagen, wie ich eine Art Boxplot in R für die 20 Verteilungen zeichnen kann, mit Punkten für den Median und nur einer Linie anstelle einer Box, wie die folgende. Bitte schlagen Sie mir auch vor, ob es eine R-Methode gibt, die nette Boxplots erzeugt, insbesondere wenn Sie mehrere Verteilungen in einem einzigen Diagramm anzeigen möchten.

 -----0----
Samarasa
quelle

Antworten:

12

(Dies ist wirklich ein Kommentar, aber da er eine Illustration erfordert, muss er als Antwort veröffentlicht werden.)

Ed Tufte hat das Boxplot in seiner visuellen Darstellung quantitativer Informationen (S. 125, Erstausgabe 1983) genau so umgestaltet , dass "eine informelle, explorative Datenanalyse möglich ist, bei der die Zeit des Forschers anderen Themen als dem Zeichnen von Linien gewidmet werden sollte". Ich habe sein Redesign (auf ganz natürliche Weise) erweitert, um in diesem Beispiel Ausreißer mit 70 parallelen Boxplots zu zeichnen:

Tufte Boxplots

Ich kann mir verschiedene Möglichkeiten vorstellen, um dies weiter zu verbessern, aber es ist charakteristisch für das, was man in der Hitze der Erkundung eines komplexen Datensatzes produzieren könnte: Wir geben uns damit zufrieden, Visualisierungen zu erstellen, mit denen wir die Daten sehen können; Eine gute Präsentation kann später kommen.

Vergleichen Sie dies mit einer herkömmlichen Wiedergabe derselben Daten:

Herkömmliche Boxplots

Tufte präsentiert mehrere andere Neugestaltungen, die auf seinem Prinzip der "Maximierung des Datentintenverhältnisses" basieren. Ihr Wert liegt in der Veranschaulichung, wie dieses Prinzip uns helfen kann, effektive Erkundungsgrafiken zu entwerfen. Wie Sie sehen können, besteht die Mechanik des Zeichnens darin, eine Grafikplattform zu finden, auf der Sie Punktmarkierungen und Linien zeichnen können.

whuber
quelle
Könnten Sie beim Zeichnen des oberen Diagramms in R helfen?
Samarasa
1
@kkp Hier ist ein grober Entwurf . Schöne Antwort (+1).
Chl
Und hier sind weitere Möglichkeiten in R - gefunden auf SO: Funktionen für Tufte-Boxplots in R? .
Chl
@chl Danke für den Link. Für den Datensatz enthält es funktionierenden R-Code zum Erstellen dieser neu gestalteten Boxplots. Interessanterweise wurde diese Frage nur drei Tage nach dieser gestellt ...
whuber
1
@naught Interessante Beobachtungen. Eine mögliche Verwendung solcher Boxplots ist eine Variante von Tukeys "wanderndem schematischen Plot", bei dem ein (großes) Streudiagramm entlang der x-Koordinate geschnitten wird und die y-Werte durch ein Boxplot in jedem Bin zusammengefasst werden. Ein solches Verfahren kann leicht 70 oder mehr nebeneinander liegende Boxplots erzeugen. Anwendungen umfassen fast alle mehrdimensionalen Daten: Beispielsweise kann die x-Koordinate eine Bodentiefe darstellen, die jeden Zentimeter abgetastet wird, und die y-Koordinate kann Daten darstellen, die an mehreren Stellen erhalten wurden.
whuber
10

Bohnenplots

Möglicherweise die coolsten Handlungen aller Zeiten, dies sind im Grunde eine Implementierung von Geigen-Handlungen mit kleinen Vielfachen. Violin-Plots haben einen massiven Vorteil gegenüber Boxplots: Sie können für Verteilungen, die nicht normal sind, viel mehr Details zeigen (z. B. können sie bimodale Verteilungen sehr gut zeigen). Da sie normalerweise auf Gaußscher Glättung (oder ähnlichem) basieren, funktionieren sie für Verteilungen mit hohen Endpunkten (wie Exponentialverteilungen) nicht wirklich gut, aber Boxplots auch nicht.

Beanplots können in R sehr einfach erstellt werden - installieren Sie einfach das Beanplot- Paket:

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!

Die beanplotFunktion verfügt über unzählige Optionen , sodass Sie sie nach Herzenslust anpassen können. Es gibt auch eine Möglichkeit, Beanplots in ggplot2 zu erstellen (benötigen die neueste Version):

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
quelle
3

Hier ist ein Beispiel für einen R-Code, der einige Möglichkeiten bietet. Sie sollten diesen Code wahrscheinlich erweitern (einschließlich Beschriftungen usw.) und ihn möglicherweise in eine Funktion umwandeln:

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

Geben Sie hier die Bildbeschreibung ein

Greg Snow
quelle