📊

【R】beeswarm plotを描きたい

2023/11/16に公開

環境

Windows10
R 4.3.1
Rstudio

概要

ゴールはbeeswarm plot(蜂群図)をRで描くこと。

Rの準備

Rにパッケージをインストールする。

install.packages("ggbeeswarm")

データの準備

今回はirisを使用していく。

data <- iris

で簡単にloadできるが、そもそも初心者(私)はデータをどんな形で用意して、どんな風に読み込むのか、からのスタートなのでそこも書いていく。
inputデータの準備に困っていない人は次のセクションまで読み飛ばし推奨。

データの読み込み

irisデータをタブ区切りテキストファイルで出力しておいた。
エクセルで開くとこんな感じ。

これをRで読み込む。

data <- read.table("iris.txt",        # ファイル名
		    header = TRUE,    # 1行目は列名として扱う
		    sep = "\t")    # タブ区切り
		    
head(data)    # データの確認

こうなってればok。

beeswarm plotを描く

library(ggbeeswarm)

ggplot(data, aes(x = Species, y = Sepal.Width)) +  
  geom_beeswarm(aes(color = Species), # 種類ごとに色分けする
                size = 3,             # プロットの大きさを指定
                cex = 2,              # プロットの散らばり幅を指定
                alpha = 0.5)          # 不透明度を指定 (0が透明、1が不透明)

beeswarm plotに箱ひげ図を重ねる場合

library(ggbeeswarm)

ggplot(data, aes(x = Species, y = Sepal.Width)) +
  geom_boxplot(fill="white")+
  geom_beeswarm(aes(color = Species),
                size = 3,
                cex = 2,
                alpha = 0.5)

geom_boxplotとgeom_beeswarmの順番を逆にすると下記のようになってしまうので注意。

X軸の項目以外で色分けしたいとき

2024/5/31追記。
irisだと説明がしにくいので、ggplot2に入っているdiamondsというデータセットを使用する。diamondsは5万個以上のダイヤモンドの価格や他の属性を含むデータセットで、割と使いやすいのだが、なにぶんデータが多すぎることがネック。ということで、今回は最初の100行だけ抜きだして使用することにする。データの形や読み込みの方法は既に上で書いているので割愛。

データの準備

library(ggbeeswarm)

data <- diamonds        # dataにdiamondsを読み込む
data <- head(data,100)  # 最初の100行だけ抽出
head(data)    # データの確認
nrow(data)    # 100行抽出できたか確認

こうなってればok。

本番

ggplot(data, aes(x = cut, y = carat)) +  
  geom_beeswarm(aes(color = color), # colorごとに色分けする
                size = 3,             # プロットの大きさを指定
                cex = 1,              # プロットの散らばり幅を指定
                alpha = 0.5) 

参考

https://brain-storm.space/ggbeeswarm/820/
https://www.kani3blog.com/r_boxplot/
https://heavywatal.github.io/rstats/ggplot2.html

Discussion