R: バイオリンプロットの作り方

UB3/informatics/r/violin_plot_r

このページの最終更新日: 2024/09/30

  1. 概要: バイオリンプロットとは
  2. vioplot() 関数によるバイオリンプロットの作り方
  3. ggplot によるバイオリンプロットの作り方

別ページ


広告

概要: バイオリンプロットとは

バイオリンプロットは、データの分布を確認できる以下のような図をいう。クラシックな棒グラフ + エラーバー の図に比べて、どこにデータが多く分布しているのかを見られるのがメリットである。

Violin プロット

以下のように ボックスプロットbeeswarm plot と重ね合わせる方法もあり、この場合にはさらに多くのパラメーターを含められるようになる (beeswarm + violin の図は文献 4 より)。

Violin プロット Violin プロット

vioplot() 関数によるバイオリンプロットの作り方

R の vioplot パッケージを使う (1)。インストールしていなければ、まず install.packages("vioplot") を行う。library(vioplot) で読み込んでから、関数 vioplot を使用。

Syntax はシンプルで、2 つのベクター A と B がある場合には vioplot(A, B) のようにする。

library(vioplot)
A = rnorm(100, 5, 1)
B = rnorm(100, 8, 1)
vioplot(A, B)

デフォルトで box plot も表示するようになっているようで、以下のように多くのパラメーターが含まれる。

  • 横幅はデータ数
  • 白い点が中央値
  • 黒い棒の上端が 75%、下端が 25% 四分位点
Violin プロット

軸ラベル、色などは、R 組み込み関数と同様にして指定できるものが多い。

vioplot(A, B, names = c("Group 1","Group 2"), col = "blue", ylab = c("Unit"))

Violin プロット

ggplot によるバイオリンプロットの作り方

ggplot で violin plot を描く関数は geom_violin である (3)。

まず、手作りのデータセットで 2 群のバイオリンプロットを作ってみる。

A = rnorm(100, 5, 1)
B = rnorm(100, 8, 1)
df = data.frame(A, B)

df は以下のようになる (一部のみ表示)。このデータフレームや、ベクトルの A, B をそのまま input にできれば便利なのだが、これは形式を変換する必要がある。

Violin プロット

tidyverse パッケージ に含まれる pivot_longer() 関数を使う。これによって、データが次のように並べ替えられる。

df.long <- pivot_longer(df, cols = A:B, names_to = "Categories", values_to = "Values")

Violin プロット

並べ替えられたデータを ggplot の input とする。この例では Categories が A と B のみなので 2 つの群だが、この列の種類 (aes の中で x として指定する列に含まれる群) が増えれば、複数群のプロットになる。

ggplot(df.long, aes(x = Categories, y = Values))+
geom_violin()+
theme_classic()

Violin プロット

ggplot を使った方法は、別のページでさらに詳しく解説している。ページ上の目次 から「ggplot によるバイオリンプロット」へどうぞ。


広告

References

  1. ヴァイオリンプロット. Link: Last access 2022/08/09.
  2. RDocumentation.Link: Last access 2022/12/02.
  3. 【R初心者向け】ggplot2でバイオリンプロット(violin plot)を描く.Link: Last access 2023/06/20.
  4. Tao et al., 2021a. Projected elevated [CO2] and warming result in overestimation of SPAD-based rice leaf nitrogen status for nitrogen management. Atomosphere 12, 1571.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。