ベン図は、複数の集合の関係を視覚化した図である。2 つの集合の重なりを図示すると、A、B、A∩B、および A∪B 以外の 4 つの領域に分けることができる。3 つの集合の重なりを図示すると、8 つの領域に分けることができる。このように、集合の数が n のとき、平面上に 2n 個の領域を分ける必要がある。集合が増えると分割すべき領域が指数的に増えるため、集合が多い場合は、ベン図がかえって、見づらく、理解しづらくなることがある。集合が 4 つ以上の場合は、ベン図を利用する前に、代替できる視覚化方法も一度検討したほうがいいかもしれない。また、複数の集合の関係を視覚化するとき、ベン図の他に UpSet プロットで描いた方がわかりやすい場合もある。
ベン図を作成できる R の関数として、gplots パッケージの venn
関数、venneuler パッケージの venneuler
関数、VennDiagram パッケージの venn.diagram
関数などがある。
venn
gplots パッケージ中の venn
関数はベン図を作成できる。ベン図を作成するとき、各集合の要素を、リスト型で与える。他の関数に比べて、venn
関数で作成したベン図が見劣りするが、使い方がシンプル。
library(gplots)
prot1 <- c("3U5Z", "3PT6", "1MHT", "1SSO", "1H1J", "1RIY")
prot2 <- c("3U5Z", "3PT6", "1MHT", "1T2K")
prot3 <- c("1SSO", "1H1J", "2KI2")
data <- list(A = prot1, B = prot2, C = prot3)
venn(data)
venn
関数で描いたベン図を PNG フォーマットで保存すると、画像が崩れることがある。次のようにして、背景を透明にすることで、回避される。
png("venn.png", 300, 300, bg = "transparent")
venn(data)
dev.off()
venneuler
venneuler
関数でベン図を描く例。venneuler
を利用するには、グループの重なり合う部分を予めに計算する必要がある。
library(venneuler)
A <- c("3U5Z", "3PT6", "1MHT", "1SSO", "1H1J", "1RIY")
B <- c("3U5Z", "3PT6", "1MHT", "1T2K")
C <- c("1SSO", "1H1J", "2KI2")
n.A <- length(A)
n.B <- length(B)
n.C <- length(C)
n.AB <- sum(!is.na(match(A, B)))
n.BC <- sum(!is.na(match(B, C)))
n.CA <- sum(!is.na(match(C, A)))
n.ABC <- n.A + n.B + n.C - (n.AB + n.BC + n.CA)
v <- venneuler(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))
plot(v, main = "Overlaps of ABC", col = c("darkgreen", "blue", "orange"))
VennDiagram
VennDiagram パッケージにもベン図を描く関数が用意されている。
library(VennDiagram)
a <- c("3U5Z", "3PT6", "1MHT", "1SSO", "1H1J", "1RIY")
b <- c("3U5Z", "3PT6", "1MHT", "1T2K")
c <- c("1SSO", "1H1J", "2KI2")
data <- list(A = a, B = b, C = c)
venn.diagram(
data,
fill = c(3, 2, 7), # background color
alpha = c(0.5, 0.5 , 0.5), # transparency
lty = c(1, 2, 3), # border line type
filename = "venn.tiff" # file name
)