【ggplotメモ5】バイオリンプロットを描く

今回はirisデータを使ってバイオリンプロットを描いてみたいと思います。前回描いた箱ひげ図はデータの四分位点が分かるものでしたが、バイオリンプロットはデータの分布が分かる表現方法です。

では、早速品種ごとの花びらの長さを描いていきます。irisデータは予め使えるようにしておいてください(ggplotメモ1を参考にしてください)。

# ggplot2の読み込み 
library( ggplot2 ) 

# グラフの基本設定 
ggplot() + theme_set( theme_classic(base_size = 12, base_family = "Hiragino Kaku Gothic Pro W3") ) 

# 描画 
v <- ggplot( iris, aes( x = Species, y = Petal.Length, color = Species ) ) + 
    geom_violin() + 
    xlab( "品種" ) + 
    ylab( "花びらの長さ" ) + 
    scale_y_continuous( breaks = c( 0, 2, 4, 6, 8 ), limits = c( 0, 8 ) ) + 
    theme( legend.position = "none" ) 

plot( v )

グラフのテーマをtheme_classicに設定し、日本語が使えるようにヒラギノフォントを指定しました。そして、描画のところでgeom_violin( )を書くだけのシンプルなバイオリンプロットを書いてみました。ggplot( )の中でfill = を指定していないので、塗りつぶしはありません。

このようにして書いて出来上がったプロットがこちら。

分布は左右対称になっています。まるでバイオリンのような形になることからバイオリンプロットと呼ばれています。品種によって花びらの長さの分布が違っていることがわかります。

シンプルなバイオリンプロットでは平均値などはわかりません。なので、バイオリンプロットに箱ひげ図を重ねることで、データの要約も同時に確かめたいと思います。

# 描画 
v <- ggplot( iris, aes( x = Species, y = Petal.Length, color = Species ) ) + 
    geom_violin() + 
    geom_boxplot( width = .1, outer.colour = NA ) + 
    stat_summary(fun = "mean", geom = "point", shape = 21, size = 2., fill = "white") + 
    xlab( "品種" ) + 
    ylab( "花びらの長さ" ) + 
    scale_y_continuous( breaks = c( 0, 2, 4, 6, 8 ), limits = c( 0, 8 ) ) + 
    theme( legend.position = "none" ) 

plot( v )

描画のところを少し書き直しました。geom_violin( )の次の行でボックスプロットと、平均値の位置に白い点を打つように書きました。

このようにして書いて出来上がったプロットがこちら。

箱ひげ図の中にある太線は中央値、白い丸が平均値です。

以上、バイオリンプロットでした。