Birkaç dağıtım için boxplot?


9

Ben R tek bir grafikte 20 dağılım çizmek gerekir ve boxwex = 0.3 ile bile düzenli boxplot (20 kutu) ile bana iyi (dağınık) görünmüyor. Bana 20 dağıtım için R'de bir tür boxplot çizebilir miyim, aşağıdaki gibi medyan noktaları ve kutu yerine sadece bir çizgi çizebilir misiniz? Ayrıca, özellikle tek bir grafikte birkaç dağılım göstermek istiyorsanız, güzel kutu grafikleri üreten herhangi bir R yöntemi olup olmadığını da önerin.

 -----0----

Yanıtlar:


12

(Bu gerçekten bir yorumdur, ancak bir illüstrasyon gerektirdiği için yanıt olarak gönderilmesi gerekir.)

Ed Tufte , Kantitatif Bilgilerin Görsel Gösterimi'nde (s. 125, Birinci Baskı 1983) kutu grafiğini , "araştırma işçisinin zamanının çizim çizgileri dışındaki konulara ayırması gereken" gayri resmi, keşifsel veri analizini "etkinleştirmek için yeniden tasarladı . Bu örnekte, 70 paralel kutu çizimi gösteren çizim aykırı değerlere uyum sağlamak için (tamamen doğal bir şekilde) yeniden tasarımını genişlettim:

Tufte kutu grafikleri

Bunu daha da geliştirmenin birkaç yolunu düşünebilirim, ancak karmaşık bir veri kümesini keşfetme sıcağında neler üretebileceğinin karakteristiğidir: verileri görmemize izin veren görselleştirmeler yapmaktan memnunuz ; iyi sunum daha sonra gelebilir.

Bunu aynı verilerin geleneksel bir yorumuyla karşılaştırın:

Geleneksel kutu grafikleri

Tufte, "veri mürekkebi oranını en üst düzeye çıkarma" ilkesine dayanarak başka birkaç yeniden tasarım sunar. Onların değeri, bu prensibin etkili keşif grafikleri tasarlamamıza nasıl yardımcı olabileceğini göstermektir. Gördüğünüz gibi, bunları çizme mekaniği, nokta işaretleri ve çizgiler çizebileceğiniz herhangi bir grafik platformu bulmak anlamına gelir.


R'deki en iyi grafiği çizmede yardımcı olabilir misiniz?
samarasa

1
@kkp İşte kaba bir taslak . Güzel yanıt (+1).
chl

Ve R'de SO üzerinde bulunan diğer olasılıklar: R'deki Tufte boxplotları için mevcut fonksiyonlar? .
chl

@chl Bağlantı için teşekkür ederim. Kayıt için, bu yeniden tasarlanan kutu grafiklerini üretmek için çalışan R kodunu içerir. İlginçtir, bu soru bundan sadece üç gün sonra gönderildi ...
whuber

1
@naught İlginç gözlemler. Bu kutu grafiklerinin potansiyel bir kullanımı, bir (büyük) dağılım grafiğinin x-koordinatı boyunca dilimlendiği ve y değerlerinin her bir kutudaki bir kutu grafikle özetlendiği Tukey'in "gezici şematik çiziminin" bir varyantıdır. Böyle bir prosedür kolayca 70 veya daha fazla yan yana kutu grafiği oluşturabilir. Uygulamalar hemen hemen her çok boyutlu veriyi içerir: örneğin, x koordinatı her santimetreden örneklenmiş bir toprak derinliğini ve y koordinatı birden fazla konumda elde edilen verileri temsil edebilir.
whuber

10

Beanplots

Muhtemelen şimdiye kadarki en havalı parseller, bunlar temel olarak keman parsellerinin küçük katlarıdır. Keman çizimleri kutu çizgilerine göre çok büyük bir avantaja sahiptir: normal olmayan dağılımlar için çok daha fazla ayrıntı gösterebilirler (örneğin iki modlu dağılımları gerçekten iyi gösterebilirler). Genellikle Gauss düzgünleştirmesine (veya benzerlerine) dayandırıldıklarından, yüksek uç noktaları olan (üstel dağılımlar gibi) dağıtımlar için gerçekten iyi çalışmazlar, ancak daha sonra kutu grafikleri de işe yaramaz.

Beanlots R'de kolayca elde edilebilir - beanplot paketini kurmanız yeterlidir :

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!

beanplotFonksiyonu vardır seçeneklerin ton , böylece gönlüne özelleştirebilirsiniz. Ayrıca ggplot2'de beanplots yapmanın bir yolu var (en son sürüme ihtiyacınız var):

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

İşte bunu yapmak için birkaç yol için bazı örnek R kodu, muhtemelen bunu genişletmek isteyeceksiniz (etiketleri dahil) ve belki bir işleve dönüştürmek isteyeceksiniz:

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

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.