Rでベン図(Venn diagram)を描く方法|大きさも自動調整【コード&図付き】
【記事作成者】 酒井 裕麻 (株式会社Bistro 代表取締役社長)
Rでベン図を描くには?(はじめに)
ベン図(Venn diagram)は、複数の集合の重なりや関係性を視覚的に表現するのに最適な図です。データ分析においては、セグメント間の重複や共通要素を直感的に把握するためによく使われます。
本記事では、Rでベン図(Venn図)を描く方法をわかりやすく解説します。特に、集合のサイズに応じてオイラー図も描ける「eulerr」パッケージを使って、2つ・3つ以上の集合をベン図に可視化する手順を、コードと図付きで紹介します。
※Rのインストールがお済みでない方は、以下の記事をご確認ください。
👉 RとR Studioのインストール方法 【誰でもできる画像解説付き】 – 株式会社Bistro
※ベン図とは : 2つの集合の重複状況を2つの円を使って表現している図
(※ベン図 – Wikipedia)
eulerrパッケージとは?
Rには複数のベン図描画パッケージがありますが、eulerrは特にオイラー図の作成に強いライブラリです。
通常のベン図(Venn diagram)はすべての重複領域がある前提で描かれますが、オイラー図(Euler diagram)は「実際に存在する重なりのみ」を反映して図示するため、より現実のデータに近い形で可視化できます。
eulerrパッケージは、集合の要素数に応じて円の大きさや重なりを自動調整してくれるため、データ分析業務での説得力ある可視化に最適です。
ベン図とオイラー図の違い:
-
ベン図:全ての領域(交差)が存在する前提で描画
-
オイラー図:実際に存在する領域のみを描画(重なりがなければ円は交差しない)
eulerrのインストール方法
以下のコードRコンソールに入力して実行してください。
install.packages("eulerr")
※ダブルクオーテーションでパッケージ名はくくってください。
※私の画面ではインストール済のため少し異なった表示になってしまっています。
インストール完了後、「The downloaded binary packages are in」というメッセージが表示されれば準備完了です。
Rで2つの集合のベン図を描く方法(基本編)
ベン図の作成には以下のコードを使用します。
library("eulerr") A = 34215 B = 52131 AB = 10242 fit = euler(c('A'=A,'B'=B,'A&B'=AB),shape = "ellipse") name_A = "セグメントA" name_B = "セグメントB" plot(fit, fills = list(fill = c("#98FB98","#EE82EE"), alpha = 0.95), labels = list(col = "#333333", font = 1), quantities = TRUE, legend = list(labels = c(name_A, name_B)) )
上記のコードの実行結果で以下のベン図が出力されました。
今回の処理の中で使用する変数は以下のような構造になっていました。
- library(“eulerr”) : eulerrというパッケージを読み出す
- A = 34215 : A群のみに該当する部分の出現数を入力する
- B = 52131 : B群のみに該当する部分の出現数を入力する
- AB = 10242 : A群とB群の重複している部分の出現数を入力する
- fit = euler(c(‘A’=A,’B’=B,’A&B’=AB),shape = “ellipse”) : ベン図の出現数情報をデータ化
- name_A = “セグメントA” : A群の名称を命名
- name_B = “セグメントB” : B群の名称を命名
- fills = list(fill = c(“#98FB98″,”#EE82EE”), : A群とB群の色を選択
- quantities = TRUE, : 数字を出力するか選択
Rで3つの集合をベン図にする(応用編)
次は、3つの集合(A, B, C)を含むベン図です。
#ベン図 library(eulerr) A = 300 B = 200 AB = 100 C = 500 AC = 50 BC = 30 ABC = 150 fit <- euler(c('A'=A,'B'=B,'C'=C, 'A&B'=AB,'A&C'=AC,'B&C'=BC,'A&B&C'=ABC) ,shape = "ellipse") #表記の設定 name_A = "セグメントA" name_B = "セグメントB" name_C = "セグメントC" #ベン図の描写 plot(fit, fills = list(fill = c("#98FB98","#EE82EE","#00BFFF"),alpha = 0.95), labels = list(col = "#333333", font = 1),quantities = TRUE, legend = list(labels = c(name_A, name_B, name_C)))
上記のコードの実行結果で以下のベン図が出力されました。
よくあるエラーと対処法(Tips)
-
Q. 重なりがないはずなのに円が重なって見えるのですが?
→shape = "ellipse"
オプションを指定すると、正確に重なりを避けて描写されます。 -
Q. 図の精度が低く感じます
→error_plot(fit)
を使うと、フィットの誤差(適合度)を可視化できます。
他のRベン図パッケージとの比較
パッケージ名 | 特徴 |
---|---|
eulerr | 円サイズが要素数に比例、オイラー図にも対応 |
VennDiagram | 出力の自由度が高いが、最大3集合が限界 |
ggVennDiagram | ggplot2ベースで美しく、最大7集合まで対応可能 |
より見た目を重視する場合は ggVennDiagram、簡易的に済ませたい場合は VennDiagram も選択肢ですが、要素数に応じた正確な図を描きたいなら「eulerr」が最もおすすめです。
4つ以上の集合?その場合はUpSet図を!
集合が4つ以上になると、ベン図では視覚的に見づらくなることがあります。
その際には、UpSet図(UpSetRパッケージ)という代替手法も検討してみてください。
まとめ:Rでのベン図作成はeulerrが最も手軽で正確!
-
eulerrは、Rでのベン図・オイラー図作成に特化したパッケージ
-
2〜3集合程度までの可視化に非常に適しており、図もシンプルで分かりやすい
-
要素数に比例した正確なベン図が簡単に描けるため、データ分析やレポート資料作成にも最適
👉 Rを使ってベン図を描くことで、分析結果を視覚的に説得力ある形で伝えることができます。ぜひ活用してみてください!
関連リンク・参考資料
============================================================================================= この記事を書いた人📝 酒井 裕麻 (株式会社Bistro 代表取締役社長) 慶應義塾大学 理工学部 物理情報工学科 卒業。 外資系広告代理店 マッキャンエリクソン に新卒で入社後、データサイエンティストとしてCRM分析やマーケティングミックスモデリング(MMM)を数多く手掛ける。 その後独立し、データマーケティングカンパニー 株式会社Bistro を設立。 現在は、大手通信キャリア、銀行、IT企業、外資系広告代理店などをクライアントに、データ分析・BI導入・広告最適化支援を幅広く提供している。 ============================================================================================= 📩
データに関するお問い合わせはお気軽にどうぞ
マーケティング分析、GA4やLooker Studioを活用したBIダッシュボード構築、BigQuery等を用いたデータ基盤整備まで、
貴社の課題に合わせた最適なデータ活用をご提案します。
ご相談は無料です。お気軽にお問い合わせよりご連絡ください。
このコンテンツをシェアする