12/4 箱ひげ図, 図の保存

こんにちは。今日は箱ひげ図です。細かい図の調整や保存方法についても紹介します。ガンガンいきましょう

箱ひげ図

箱ひげ図とは、カテゴリーごとにデータを並べてプロットする手法です。棒グラフでいいじゃんと思うかもしれませんが、箱ひげ図には最大値, 最小値がひげの上端下端に配置されており、上底下底が第三・第一四分位点となるような長方形で描かれており、データの分布をざっと見れる点で棒グラフよりも優れています(※データ全体の分布がぼやけてしまうので僕は散布図を重ねたものやバイオリンプロットなどのほうが好きです)。
まあ実際に見たほうが速いでしょう。今日はがく長の種間の差異を比較してみます。

data.iris <- iris
g <- ggplot(data.iris,aes(x=Species,y=Sepal.Length))+
  theme_classic()+
  geom_boxplot()
ggsave("fig/1204_1.jpeg",g,width = 10,height = 7.5,units="cm")

virginicaの下端の黒い点は外れ値です。ggplotのboxplotは外れ値を自動で判定してくれます。どのように判定しているかというと、
The upper whisker extends from the hinge to the largest value no further than 1.5 * IQR from the hinge (where IQR is the inter-quartile range, or distance between the first and third quartiles). The lower whisker extends from the hinge to the smallest value at most 1.5 * IQR of the hinge. Data beyond the end of the whiskers are called “outlying” points and are plotted individually. (引用: geom_boxplot()のヘルプドキュメントより)
つまり、第三四分位点or第一四分位点から測って(第三四分位点-第一四分位点)*1.5以内の最も大きい値を最大値(=ひげの上端), 最も小さい値を最小値(=下端)とし、そこから外れた点を外れ値としているようです。

散布図を重ねる

上に記したとおり、箱ひげ図はデータの分布をざっと見るときに便利ですが、もとの分布を覆い隠してしまうというデメリットも存在します。そこでよく行われる描き方が、箱ひげ図の上に散布図をばらまくという手法です。やってみましょう。

g1 <- ggplot(data.iris,aes(x=Species,y=Sepal.Length))+
  theme_classic()+
  geom_boxplot()+
  geom_jitter()
ggsave("fig/1204_2.jpeg",g1,width = 10,height = 7.5,units="cm")

前回は散布図を描くためにgeom_point()を使いましたが、今回はgeom_pointだと点がランダムに撒かれなくて気持ち悪い感じになります。実際にプロットを見てみましょう。左側がjitter, 右側がpointです。
ちなみにggplotオブジェクトを並べるにはgridExtraというライブラリーを使うといいです。

library(gridExtra)
g2 <- ggplot(data.iris,aes(x=Species,y=Sepal.Length))+
  theme_classic()+
  geom_boxplot()+
  geom_point()
gmerge <- grid.arrange(g1,g2,ncol=2)
ggsave("fig/1204_3.jpeg",gmerge,width = 20,height = 7.5,units="cm")

geom_pointだと一直線にデータが並べられてしまって気持ち悪いしデータの分布がわからないですね。というわけでこういうときはgeom_jitter, 覚えときましょう。

図の保存方法

ggplotオブジェクトの保存はggsaveがおすすめだと言いましたが、縦横サイズを変えるとどうなるのか見てみましょう。まずは上の横並びのプロットで縦横比を保ったままサイズを5倍でかくすると、

ggsave("fig/1204_4.jpeg",gmerge,width = 60,height = 22.5,units="cm")

それぞれのオブジェクト(ドット、軸目盛り、線など)の大きさは変わらず間延びした感じになります。最適な縦横比を描きながら見つけるのが良さそうです。
それからpdfファイルが貼れないので実際に見せることはできませんが、ggsaveでpdf形式での保存も可能です。pdfは画像ファイルと違ってどれだけ拡大してもぼやけないので、真面目にfigureを作るときはpdfにしましょう。見栄えが断然違います(重くなるのが難点ですが)。
コードと比較画像を載せておきます。

ggsave("fig/1204_4.jpeg",gmerge,width = 60,height = 22.5,units="cm")
1204_3.jpeg, 拡大図
1204_5.pdf, 拡大図

次回はこの箱ひげ図+散布図に色をつけて論文っぽい感じにしてみます。

コメントする