理系夫婦のうたたねブログ

理系夫婦が好きなことを書いていきます。たまに医学っぽいことを書いていますが、あくまで私見です。

ggpubrで箱ヒゲ図、バイオリンプロット

はじめに

ggpubrで箱ヒゲ図とバイオリンプロットを書いてみます。 私としては箱ひげ図の方が好きです。バイオリンプロットはなんとなく、KDEでの推定があっているのかわからない時があって、誤解を与えそうな気がするからです。

データの紹介

今回使うのはToothGrowth というデータセットです。 モルモットにビタミンCを投与した際の歯の長さについてのデータセットだそうです。 投与方法が2つあって、オレンジジュースとして投与したデータと、精製したアスコルビン酸で投与したデータがありますが、今回はまとめて表示しています。

処理と結果

箱ヒゲ図

まずは何も考えずに箱ヒゲ図を作ってみます。

data("ToothGrowth")
df <- ToothGrowth
ggboxplot(df, x = "dose", y = "len", width = 0.8)

簡単に箱ヒゲ図

これだけだと、味気ないのと、データ点を全て出した方が誠実だと思われるので、その様にしてみます。 doseごとに色を変えるためにcolor = dose データ点を出すためにadd = jitter とすると

ggboxplot(df, "dose", "len",
          color = "dose", palette =c("blue", "red", "magenta"),
          add = "jitter", shape = "dose")

色を変えたプロット

となります。

塗りつぶしたい時はcolor = doseではなくfill = doseにすればよく

ggboxplot(df, "dose", "len",
          fill = "dose", palette ="Blues",
          add = "jitter", shape = "dose")

塗りつぶし

となります。こちらの方が良いかもしれません。

さらに、調整を行ってみます。

p<-ggboxplot(df, x = "dose", y = "len",
         add = "dotplot",
         add.params = list(size = 0.5, fill = "white"),
         fill = "dose",
         palette = "Blues") + theme(aspect.ratio = 1.3)
ggpar(p,
      xlab = "Dose", 
      ylab = "Tooth length",
      font.main = c(18),
      font.x = c(18, "bold"),
      font.y = c(18, "bold"),
      font.tickslab = c(14,"bold"),
      legend = "right",
      legend.title = "Condition")

ちょっと調整したグラフ

ここでは、Boxplotにaddでドットプロット (各データ点を白丸で付け加える) を追加しています。ドットプロットの調整はadd.paramsで行っており、丸の大きさと塗りつぶしの色を変更しています。

さらに+theme(aspect.ratio = 1.3) でいい感じの縦横比になるように調整を行っています。

ggparでは軸ラベルを調整しています。こないだの記事の通りです。

med-ruka.hatenablog.com

バイオリンプロット

上記のグラフは全て、ggboxplotをggviolinにすればバイオリンプロットに変更可能です。

p<-ggviolin(df, x = "dose", y = "len",
             add = "dotplot",
             add.params = list(size = 0.5, fill = "white"),
             fill = "dose",
             palette = "Blues") + theme(aspect.ratio = 1.3)
ggpar(p,
      xlab = "Dose", 
      ylab = "Tooth length",
      font.main = c(18),
      font.x = c(18, "bold"),
      font.y = c(18, "bold"),
      font.tickslab = c(14,"bold"),
      legend = "right",
      legend.title = "Condition")

バイオリンプロット
やっぱり私は箱ひげのほうが好みですが。

 感想

やっぱりggpubrは簡単でいいですね。 しばらくは使ってみようかと思います。ただ、ライブラリにないグラフは結局ggplot2を使う気がするので、ggplot2に習熟する方が楽??
あと、p-valueとかつける方法もあるみたいですが、個人的にはイラレでつける方が結局楽かなと思います。
なのでフローとしては
ミニマルな図をRで作成 → イラレで装飾をたす
みたいな感じですね今のところ。