mecobalamin’s diary

人間万事塞翁が馬

https://help.hatenablog.com/entry/developer-option

Rでboxplotとbeeswarmを重ねて表示

boxplotに元データの点を重ねたい
蜂群図(ほうぐんず)というらしい

こちらのサイトを参考にさせてもらった
Rで箱ひげ図と蜂群図を合体させる | Takuro FUJITA@NIT, Fukui College
ビースウォーム | 値を点としてグラフ上にプロットされる
https://ninosanpo.hatenablog.com/entry/2018/08/03/141738

24 October 2019追記
ここも詳しい
RPubs - 箱ひげ図の書き方
追記ここまで

12 December 2020 追記
記事を追加した
mecobalamin.hatenablog.com
追記ここまで

beeswarmのライブラリをインストールする
コマンドラインからは以下のようにする

install.packages("beeswarm", dependencies = TRUE)

または
[パッケージ] -> [パッケージのインストール...]
からインストールする

Irisのデータを使う
mecobalamin.hatenablog.com

Data.Iris <- iris[1:4]

グラフの作成
setwd()にファイルを保存するディレクトリのパスを記入する

library(beeswarm)
setwd("path\\to\\pngfile")
png("boxplot_iris.png", width = 800, height = 400)
par(mar = c(5, 5, 1, 1))
boxplot(Data.Iris, ylim=c(0,8), ylab = "length or width")
beeswarm(Data.Iris, add = TRUE, col = c("red", "blue", "green", "magenta"), pch = 20)
dev.off()

結果はこうなった

26 September 2019追記
irisのデータは3種類のirisのデータなので点を色分けするコードを書いた

library(beeswarm)

setwd("path\\to\\pngfile")

png("boxplot_iris.png", width = 800, height = 400)
par(mar = c(5, 5, 1, 1))

Data.Iris <- iris
Data.Iris[,6:9] <- iris[,5]

Point.Color <- c("#9bbb5960", "#c0504d60","#4f81bd60")
Species.List <- as.character(unique(Data.Iris$Species))

for(i in 1:3){
  Data.Iris[6:9] <- sub(Species.List[i], Point.Color[i], Data.Iris[,6])
}

colnames(Data.Iris)[6:9] <- "Color"

boxplot(Data.Iris[1:4], ylim=c(0,8), ylab = "length or width", outline = FALSE)
beeswarm(Data.Iris[1:4], add = TRUE, pwcol = Data.Iris[6:9], pch = 20)

dev.off()

結果はこれ

pwcolで色指定するが
データの列と色を指定する列を
1対1で対応させる必要あり
データ4列に対して色を指定する列も4列必要
同じカラーコードの繰り返しなんだけど。
あまりスマートでないの書き直したいが。。。

グラフに使うデータはこんな感じ
4種のデータごとに色の組み合わせを変えられる

> head(Data.Iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species     Color     Color     Color     Color
1          5.1         3.5          1.4         0.2  setosa #9bbb5960 #9bbb5960 #9bbb5960 #9bbb5960
2          4.9         3.0          1.4         0.2  setosa #9bbb5960 #9bbb5960 #9bbb5960 #9bbb5960
3          4.7         3.2          1.3         0.2  setosa #9bbb5960 #9bbb5960 #9bbb5960 #9bbb5960
4          4.6         3.1          1.5         0.2  setosa #9bbb5960 #9bbb5960 #9bbb5960 #9bbb5960
5          5.0         3.6          1.4         0.2  setosa #9bbb5960 #9bbb5960 #9bbb5960 #9bbb5960
6          5.4         3.9          1.7         0.4  setosa #9bbb5960 #9bbb5960 #9bbb5960 #9bbb5960

12 February 2020 追記
Data.Irisの型はdata.frame
追記ここまで