🌟

【Plot】ベン図 円の大きさを集合要素数に応じて変更

2023/02/15に公開

RのvennパッケージやVennDiagramパッケージでベン図を描くと、各群の集合の大きさに関わらず、円の大きさが一律になる。
eulerrパッケージで集合数に応じた円の大きさ変更ができたので記録しておく。

library(eulerr)


文字ベクトルを用意

3つのベクトルA,B,Cをそれぞれ用意する。基本は文字列のベクトルのはず。

A <- c("〇", "〇〇", "〇〇〇")
B <- c("〇〇", "□", "□□")
C <- c("〇〇〇", "□", "△△")


共通項、非共通項を計算

AB <- intersect(A,B) # A∩B
BC <- intersect(B,C) # B∩C
CA <- intersect(C,A) # C∩A
ABC <- Reduce(intersect, list(A,B,C)) # A∩B∩C

n.A <- length(Reduce(setdiff, list(A,B,C))) # A-A∩B-C∩A
n.B <- length(Reduce(setdiff, list(B,A,C))) # B-A∩B-B∩C
n.C <- length(Reduce(setdiff, list(C,A,B))) # C-C∩A-B∩C
n.ABC <- length(ABC)
n.AB <- length(AB) - n.ABC
n.BC <- length(BC) - n.ABC
n.CA <- length(CA) - n.ABC


euler関数に各項目の共通項、非共通項を通す。

v <- euler(c("A" = n.A, "B" = n.B, "C" = n.C, "A&B" = n.AB, "B&C" = n.BC, "C&A" = n.CA, "A&B&C" = n.ABC))

オブジェクトvの中身

plot関数で描画


plot(v, 
     quantities = T, # <-- circle内に値を表示
     )

色、透明度

plot(v, 
     quantities = T, # <-- circle内に値を表示
     alpha = 0.5, # 透明度
     fill = c("#FFFF33", "lightgray", "lightblue"), # 塗りつぶし色
     col = c("red", "black", "blue"), # 枠の色
     )

凡例を表示

plot(v, 
     quantities = T, # <-- circle内に値を表示
     legend = T, # <-- TRUEにすると凡例が作られるが、circle内の文字が消える。
     )

表示ラベルを変更

plot(v, 
     quantities = T, # <-- circle内に値を表示
     labels = c("cluster1","cluster2","cluster3")
     )

Discussion