Boxplot para várias distribuições?

9

Preciso desenhar 20 distribuições em um único gráfico em R, e isso não me parece bom (confuso) com boxplot regular (20 caixas), mesmo com boxwex = 0,3. Você poderia me sugerir como plotar um tipo de boxplot em R para as 20 distribuições, com pontos para mediana e apenas uma linha em vez de caixa, como a abaixo. Por favor, sugira-me também se existe algum método R que produza bons gráficos de caixa, especificamente se você deseja mostrar várias distribuições em um único gráfico.

 -----0----
samarasa
fonte

Respostas:

12

(Este é realmente um comentário, mas como requer uma ilustração, ele deve ser postado como resposta.)

Ed Tufte redesenhou o boxplot em seu Visual Display of Quantitative Information (p. 125, Primeira Edição 1983) precisamente para permitir "uma análise informal e exploratória dos dados, em que o tempo do pesquisador deveria ser dedicado a outros assuntos além de desenhar linhas". Eu (de maneira perfeitamente natural) estendi seu redesenho para acomodar extremos de desenhos neste exemplo, mostrando 70 boxplots paralelos:

Boxplots de tufos

Posso pensar em várias maneiras de melhorar ainda mais isso, mas é característico do que se pode produzir no calor da exploração de um conjunto de dados complexo: estamos satisfeitos em fazer visualizações que nos permitem ver os dados; boa apresentação pode vir mais tarde.

Compare isso com uma versão convencional dos mesmos dados:

Boxplots convencionais

Tufte apresenta várias outras reformulações baseadas em seu princípio de "maximizar a taxa de tinta dos dados". Seu valor reside em ilustrar como esse princípio pode nos ajudar a projetar gráficos exploratórios eficazes. Como você pode ver, a mecânica de plotá-los equivale a encontrar qualquer plataforma gráfica na qual você possa desenhar marcadores e linhas de ponto.

whuber
fonte
Você poderia ajudar no desenho do gráfico superior em R?
Samara #
11
@kkp Aqui está um rascunho . Boa resposta (+1).
chl
E aqui estão mais possibilidades em R - encontradas em SO: Funções disponíveis para boxplots Tufte em R? .
chl
@chl Obrigado pelo link. Para o registro, inclui o código R de trabalho para produzir esses gráficos de caixa redesenhados. Curiosamente, essa pergunta foi publicada apenas três dias após esta ...
whuber
11
@naught Observações interessantes. Um uso potencial de tais gráficos de caixa é uma variante do "gráfico esquemático errante" de Tukey, em que um gráfico de dispersão (grande) é cortado ao longo da coordenada x e os valores y são resumidos por um gráfico de caixa em cada caixa. Esse procedimento pode gerar facilmente 70 ou mais boxplots lado a lado. As aplicações incluem quase todos os dados multidimensionais: por exemplo, a coordenada x pode representar uma profundidade do solo amostrada a cada centímetro e a coordenada y pode representar dados obtidos em vários locais.
whuber
10

Beanplots

Possivelmente as melhores tramas de todos os tempos, essas são basicamente uma implementação de múltiplos pequenos de tramas de violino. Os gráficos de violino têm uma enorme vantagem sobre os gráficos de caixa: eles podem mostrar muito mais detalhes sobre distribuições que não são normais (por exemplo, eles podem mostrar muito bem as distribuições bimodais). Como eles geralmente são baseados na suavização gaussiana (ou similar), eles não funcionarão muito bem em distribuições com pontos finais altos (como distribuições exponenciais), mas também não serão os boxplots.

Os beanplots podem ser alcançados com muita facilidade no R - basta instalar o pacote 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!

A beanplotfunção possui inúmeras opções , para que você possa personalizá-la de acordo com o desejo do seu coração. Há também uma maneira de fazer gráficos de bean no ggplot2 (precisa da versão mais recente):

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

Aqui está um exemplo de código R para algumas maneiras de fazer isso, você provavelmente desejará expandir isso (incluir rótulos etc.) e talvez transformá-lo em uma função:

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

insira a descrição da imagem aqui

Greg Snow
fonte