複数の分布の箱ひげ図?


9

Rの単一のグラフに20の分布を描画する必要があります。boxwex= 0.3を使用しても、通常のボックスプロット(20ボックス)では見栄えがよくありません(乱雑)。以下のように、中央値のドットとボックスの代わりにラインだけを使用して、20の分布に対して一種のボックスプロットをRでプロットする方法を教えてください。素敵な箱ひげ図を作成するRメソッドがあるかどうか、特に単一のグラフで複数の分布を表示したい場合も教えてください。

 -----0----

回答:


12

(これは本当にコメントですが、イラストが必要なため、返信として投稿する必要があります。)

Ed Tufteは、彼の定量的情報の視覚的表示(p。125、初版1983)で箱ひげ図を正確に再設計して、「非公式の探索的データ分析、つまり研究員の時間を線の描画以外のことに専念させる」ことができるようにしました。私は(完全に自然な方法で)70の平行箱ひげ図を示すこの例の外れ値の描画に対応するように彼の再設計を拡張しました:

タフティ箱ひげ図

私はこれをさらにを改善するために、いくつかの方法を考えることができますが、それは1つが、複雑なデータセットを探索の暑さの中で作り出すかもしれないものの特性です:私たちは私たちが聞かせて可視化させるために満足している参照データを、良いプレゼンテーションは後で来ることができます。

これを同じデータの従来のレンディションと比較してください。

従来の箱ひげ図

Tufteは、「データインク比率を最大化する」という彼の原則に基づいて、他にもいくつかの再設計を提示しています。彼らの価値は、この原則が効果的な探索的グラフィックの設計にどのように役立つかを示すことにあります。ご覧のとおり、それらをプロットするメカニズムは、ポイントマーカーとラインを描画できるグラフィックプラットフォームを見つけることと同じです。


Rで一番上のグラフを描くのを手伝ってくれませんか?
samarasa

1
@kkp 下書きです。素敵な反応(+1)。
11

そして、ここにRのさらなる可能性があります -SOで見つかりました:RのTufteボックスプロットで利用可能な関数?
chl

@chlリンクありがとうございます。記録として、これらの再設計された箱ひげ図を作成するための実際のRコードが含まれています。興味深いことに、この質問はこの質問のわずか3日後に投稿されました...
whuber

1
@naught興味深い観察。そのような箱ひげ図の1つの潜在的な使用法は、(大きな)散布図がx座標に沿ってスライスされ、y値が各ビンの箱ひげ図に要約されるTukeyの「さまようスケマティックプロット」のバリアントです。このような手順では、70以上の横並びの箱ひげ図を簡単に生成できます。アプリケーションにはほとんどすべての多次元データが含まれます。たとえば、x座標は1センチメートルごとにサンプリングされた土壌の深さを表し、y座標は複数の場所で取得されたデータを表すことがあります。
whuber

10

ビーンプロット

おそらくこれまでで最もクールなプロット、これらは基本的にバイオリンプロットの小さな複数の実装です。バイオリンプロットは、箱ひげ図よりもはるかに優れています。正規分布ではない分布の詳細を表示できます(たとえば、バイモーダル分布を非常によく表示できます)。それらは通常ガウス平滑化(または同様の)に基づいているため、エンドポイントの高い分布(指数分布など)に対してはうまく機能しませんが、どちらもボックスプロットしません。

BeanplotはRで非常に簡単に実現できます-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機能にはたくさんのオプションがあるので、あなたの心の欲望に合わせてカスタマイズすることができます。ggplot2でbeanplotsを実行する方法もあります(最新バージョンが必要です)。

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

これを行うためのいくつかの方法のサンプルRコードを次に示します。おそらくこれを拡張し(ラベルなどを含め)、おそらく関数に変換したいと思うでしょう。

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

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.