Boxplot pour plusieurs distributions?

9

J'ai besoin de dessiner 20 distributions dans un seul graphique en R, et cela ne me semble pas bien (encombré) avec boxplot régulier (20 cases) même avec boxwex = 0.3. Pourriez-vous me suggérer comment puis-je tracer une sorte de boxplot en R pour les 20 distributions, avec des points pour la médiane et juste une ligne au lieu de box, comme celui ci-dessous. Veuillez également me suggérer s'il existe une méthode R qui produit de beaux boxplots, en particulier si vous souhaitez afficher plusieurs distributions dans un seul graphique.

 -----0----
samarasa
la source

Réponses:

12

(Il s'agit vraiment d'un commentaire, mais comme il nécessite une illustration, il doit être publié en réponse.)

Ed Tufte a repensé le boxplot dans son Visual Display of Quantitative Information (p. 125, First Edition 1983) précisément pour permettre "une analyse informelle et exploratoire des données, où le temps du chercheur devrait être consacré à des questions autres que le tracé de lignes". J'ai (d'une manière parfaitement naturelle) étendu sa refonte pour tenir compte des valeurs aberrantes dans cet exemple montrant 70 boxplots parallèles:

Boxplots en tufte

Je peux penser à plusieurs façons d'améliorer encore cela, mais c'est caractéristique de ce que l'on pourrait produire dans le feu de l'exploration d'un ensemble de données complexe: nous nous contentons de faire des visualisations qui nous permettent de voir les données; une bonne présentation peut venir plus tard.

Comparez cela à un rendu conventionnel des mêmes données:

Boxplots conventionnels

Tufte présente plusieurs autres remaniements basés sur son principe de «maximiser le taux d'encre des données». Leur valeur réside dans l'illustration de la façon dont ce principe peut nous aider à concevoir des graphiques exploratoires efficaces. Comme vous pouvez le voir, la mécanique de leur traçage revient à trouver n'importe quelle plate-forme graphique dans laquelle vous pouvez dessiner des marqueurs de point et des lignes.

whuber
la source
Pourriez-vous aider à dessiner le graphique du haut dans R?
samarasa
1
@kkp Voici un brouillon . Belle réponse (+1).
chl
Et voici d'autres possibilités dans R - trouvées sur SO: Fonctions disponibles pour les boîtes à moustaches Tufte dans R? .
chl
@chl Merci pour le lien. Pour mémoire, il comprend un code R fonctionnel pour produire ces boîtes à moustaches redessinées. Fait intéressant, cette question a été publiée trois jours seulement après celle-ci ...
whuber
1
@naught Observations intéressantes. Une utilisation potentielle de ces boîtes à moustaches est une variante du «diagramme schématique errant» de Tukey dans lequel un (grand) nuage de points est découpé le long de la coordonnée x et les valeurs y sont résumées par un boîte à moustaches dans chaque bac. Une telle procédure peut facilement générer 70 boîtes à moustaches côte à côte ou plus. Les applications incluent presque toutes les données multidimensionnelles: par exemple, la coordonnée x peut représenter une profondeur de sol échantillonnée chaque centimètre et la coordonnée y peut représenter des données obtenues à plusieurs endroits.
whuber
10

Beanplots

Peut-être les intrigues les plus cool de tous les temps, ce sont fondamentalement une implémentation en petits multiples des intrigues de violon. Les tracés de violon ont un avantage énorme sur les tracés de boîte: ils peuvent montrer beaucoup plus de détails pour les distributions qui ne sont pas normales (par exemple, ils peuvent très bien montrer les distributions bimodales). Parce qu'ils sont généralement basés sur le lissage gaussien (ou similaire), ils ne fonctionneront pas vraiment bien pour les distributions avec des points haut de gamme (comme les distributions exponentielles), mais ensuite, les boxplots ne le seront pas non plus.

Les beanplots peuvent être réalisés très facilement dans R - il suffit d'installer le paquet 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 beanplotfonction a des tonnes d'options , vous pouvez donc la personnaliser selon le désir de votre cœur. Il y a aussi un moyen de faire des beanplots dans ggplot2 (besoin de la dernière 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

rien101
la source
3

Voici quelques exemples de code R pour quelques façons de le faire, vous voudrez probablement développer cela (inclure des étiquettes, etc.) et peut-être le transformer en fonction:

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

entrez la description de l'image ici

Greg Snow
la source