データの可視化についてのお話を聞かせていただいたり発表資料を見せていただいたりすると、箱ひげ図と蜂群図を合わせて、データを要約しながらも全体の分布を提示することが薦められているようです(詳しくは小林(2013)や草薙(2014)を参照)。ちなみに箱ひげ図とは下のような図です。単に平均値のみを提示する棒グラフよりも多くの情報を読み取ることができます。
蜂群図(beeswarm)とは以下の様な図です。個々のデータの全体的なばらつきが視覚的に提示されます。
この二つのグラフを合体させて以下の様なグラフを作成したいわけです。二つを合体させることで要約されたデータと個々のデータの分布を一つのグラフで読み取ることができるため、よい視覚化の手法として提案されています。
グラフの描画にはをRを使用しましたが、意外にも(?)完成までには悪戦苦闘しました。いくつか注意点があるので、備忘録として記載していおきます。
グラフ作成の前に:データの準備と蜂群図を描く準備をする
まず、データとして適当な値を持つグループ(n=30)を3グループ準備します。便宜上、dat1,dat2,dat3というグループを作成します。
dat1<-rnorm(n=30)
dat2<-rnorm(n=30)
dat3<-rnorm(n=30) # dat1,dat2,dat3に30個の乱数を格納する。(ちなみにrnorm(n=30,mean=10,sd=5)などとすると、平均値10, 標準偏差5の分布に従う乱数を30個生成してくれる。)
一応データを確認してみます。dat1と入力すると以下の様な値が入っていることが確認できました
dat1
[1] -0.696673881 -0.096907749 -0.024893093 -0.501707913 -1.148229893
[6] 0.052926455 0.056307916 1.754715429 -0.437464063 -0.129450015
[11] 0.648202583 1.843154807 0.579061711 -1.236842281 -1.086156870
[16] 0.653076210 -0.146905052 -1.488712088 -0.002318016 0.088805757
[21] -0.323390177 -1.120192715 1.512775980 -1.064644486 -0.892978699
[26] 1.454616771 0.886713657 -0.115766801 0.122375023 0.526842260
dat2、dat3も同様に確認します。
dat2
[1] 0.1019368942 -0.8198904418 -0.3744620288 -0.6072474458 -0.8027879845
[6] -0.8687848558 1.8321574210 0.2087934551 -1.2366441774 -1.2712738667
[11] -0.0006406788 -0.5999658260 0.1340664991 -1.1984889919 -0.0001141821
[16] 0.1146403068 -2.3950331007 -1.0241161067 -1.6901899350 -0.5358067819
[21] -1.6976701957 -1.5825121405 1.0014211713 1.0077299777 0.6412079903
[26] -0.4872082283 -0.4464768378 -0.8590309093 -1.2989472173 0.4512354119
dat3
[1] 0.8840772 -0.9607509 0.6621758 0.2261821 0.8937998 0.4915920
[7] -0.2081712 0.2372956 -1.1162683 -0.9370383 -1.4002460 -0.3318328
[13] -0.4560114 -0.5052164 1.2180124 1.7451215 0.4123308 -1.7272754
[19] -1.8983872 0.6186608 0.8224288 1.7339782 -1.2710421 -0.1089045
[25] 0.6216647 -0.6709525 1.0951401 -0.4407932 1.4956916 0.6493476
rnormは乱数発生関数ですので、再度rnorm関数を使って乱数を発生させると異なる値が抽出されます。
次に蜂群図を描く準備をします。蜂群図はデフォルトでは描画できませんので、beeswarmという拡張パッケージをRにインストールしなければなりません。インストールするには
install.packages(beeswarm) # パッケージbeeswarmをインストールする
と一行記述します。これでインストールが始まります。拡張パッケージも当然無料です。一行でインストール完了ですから非常に簡単ですね。ただし、インストールしただけでは使えませんので、このパッケージを使えるように読み込んであげる必要があります。読み込みには
library(beeswarm) #パッケージbeeswarmを読み込む
と一行記述します。これで蜂群図を描く準備が整いました。
まずは箱ひげ図を描画する
dat1,dat2,dat3にデータが格納されたところで、まず箱ひげ図を書きます。箱ひげ図の書き方は簡単。以下の一行を記述するだけで描画されます。
boxplot(dat1,dat2,dat3)
以下の様な図が描画されます。
ただ、これだと味気ないので、各箱ひげ図に名前をつけます。ついでに色も変えます。そこで、再度以下のように記述します。
boxplot(dat1,dat2,dat3,names=c(“dat1″,”dat2″,”dat3”),col=”gray”)
#names=c(“dat1”,”dat2”,”dat3”)というのは、1つ目のグラフ(dat1のグラフ)にdat1というグラフ名をつけ、続いて2つ目のグラフにdat2という名前を、3つ目のグラフにdat3という名前をつけます。
#col=”gray”とすると箱ひげ図がグレーに塗られます。col=”red”やcom=”orange”なども可能です。
すると以下の様な図が描画されます。
蜂群図を描画する
次に、蜂群図を描きます。まず、boxplotと同じように以下のように記述してみます。
beeswarm(dat1,dat2,dat3)
すると、なぜか以下の様なエラーが返されました
以下にエラー match.arg(method) : ‘arg’ must be NULL or a character vector
この点がクリアされずやきもきしていましたが、いろいろ調べてみると、以下のように記述する必要があることがわかりました。
beeswarm(list(dat1,dat2,dat3)) #僕が悪戦苦闘したのはここでした。
これで3つの蜂群図を一枚に収めることができました。ちなみにドットを塗りつぶしたり形を変えたり出来ます。
beeswarm(list(dat1,dat2,dat3),pch=13) #pch=13とするとドットの形が以下の図のように変わります。16とすると塗りつぶされたドットに変化します。
二つのグラフを合体させる
後は生成した箱ひげ図と蜂群図を組み合わせます。ここまでで作成した図を組み合わせるために、まず箱ひげ図生成します。
boxplot(dat1,dat2,dat3,names=c(“dat1″,”dat2″,”dat3”),col=”gray”)
次に蜂群図を上書きします。上書きするときにはadd=Tという命令を加えます。
beeswarm(list(dat1,dat2,dat3),pch=13, add=T) #add=Tを記入すると既存のグラフにプラスして描画される
すると最初に提示したような図が完成します。
一つ一つ順番を追って書きましたが、実際に分析する場合は上記の手順を一通り行う必要はありません。dat1,dat2,dat3にデータが既に入っていると仮定すると、
install.packages(beeswarm) # パッケージbeeswarmをインストールする
library(beeswarm) #パッケージbeeswarmを読み込む
boxplot(dat1,dat2,dat3,names=c(“dat1″,”dat2″,”dat3”),col=”gray”) #箱ひげ図の作成
beeswarm(list(dat1,dat2,dat3),pch=13, add=T) #蜂群図を上に重ねて描画する
の4行だけで描画できます。 (#以下は書く必要はありません)