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

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.


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.