R を使ったベン図の作り方

UB3/informatics/r/r_venn_diagram

このページの最終更新日: 2020/06/17

  1. 概要: ベン図とは
  2. VennDiagram ライブラリを使う方法
    • パッケージの準備
    • データの準備
  3. ベン図に関係するデータを出力する方法
  4. 「ベン図の重なり」に対する統計検定

広告


概要: ベン図とは

ベン図 Venn diagram は、複数の集合の関係を視覚的に示した次のような図である。


Feldmeyer et al. BMC Evol Biol 17, 237, 2017.

上記の図はかなり基本的な 3 群のベン図だが、図の中に情報が入っているパターンも多い。下の図には pie chart が入っている。

Bertevello et al. Int J Mol Sci 19, 3261, 2018.

広告

R の VennDiagram パッケージでベン図を描く方法

パッケージの準備

ググって最初に見つかったのが Ref. 1 の VennDiagram パッケージを使う方法だった。デフォルトではこのパッケージは入っていないようなので、まずインストールする必要がある。このあたりがよくわからない場合は、R のパッケージ を参照のこと。


> install.packages("VennDiagram")


CRAN のサーバーを指定し、パッケージが無事にインストールされたら、以下のようにして読み込む。


> library("VennDiagram")


Loading required package: grid
Loading required package: futile.logger

という表示が出て、パッケージが読み込まれた。これでパッケージの準備は完了。


データの準備

Ref. 1 では、以下のような形でデータを準備している。


> aichi <- c("鈴木","加藤",...)


これは vector 形式 のデータである。is.vector(aichi) で確認できる。ただし、これだとデータが大量にあるときに不便である。

Excel で鈴木、加藤のようなアイテムが縦に並んでいるとき、コピペで R に読み込んでベン図にしたいが、やってみるとデータ形式が list - dataframe になってしまい、文字列ベクターへの変換がうまくいかない。

仕方ないのでテキストエディット上で改行を「","」に置換し、一番最初と最後のみ手動で " を追加することでデータをベクターに格納する方法をまとめておく。いずれ良い方法を探したい。

以下のデータでベン図を書いてみる。香川県民と大阪県民を比較すると、きつねうどんとラーメンのみが重複している。この 2 つだけが重なったベン図ができるはずである。

Excel のデータを、まずテキストエディットにコピペすると、このようになる。改行をダブルクオーテション + コンマ + ダブルクオーテションに置換する準備をしている。

置換するとこのようになるので、一番最初の「うどん」の前と、最後の「ラーメン」のあとに " を追加すれば、コピペで R のベクターにデータを入れられるようになる。

ここまでくれば、あとは Ref. 1 に従って R を操作。確認のコマンドを入れつつ、次のようにする。

> Kagawa=c("うどん","かけうどん","きつねうどん","ぶっかけうどん","カレー","ラーメン")
> Osaka=c("きつねうどん","お好み焼き","たこ焼き","ラーメン","焼肉","ステーキ")
> typeof(Kagawa)
[1] "character"
> typeof(Osaka)
[1] "character"
> list=list(K=Kagawa, O=Osaka)
> venn.diagram(list, filename="food.png", fill=c (2,3), alpha=0.4)


fill は色を、alpha は透過率を表すと思われる。以下のような図が作業ディレクトリに出力される。

  • filename=a.png のように " " をつけ忘れると、Error in venn.diagram(list, filename = a.png) : object 'a.png' not found というエラーになる。

ベン図に関係するデータを出力する方法

ベン図は複数のリストを比較し、その重複の程度を視覚化する手段である。比較するリストから、共通のデータを抽出したり、片方に特有のデータを抽出したりする方法もここに示しておく (2)。

A, B という 2 つのオブジェクトがあるとき、intersect および setdiff を使い、以下のようにする。

  • 共通のものを抽出: intersect(A,B)
  • A のみに含まれるものを抽出: setdiff(A,B)
  • B のみに含まれるものを抽出: setdiff(B,A)

「ベン図の重なり」に対する統計検定

phyper(q, m, n, k, lower.tail = FALSE, log.p = FALSE)
広告

References

  1. R package"VennDiagram"でベン図を書く. Link: Last access 2020/01/22.
  2. R 2つのリストを比較する関数 (intersect、setdiff) の紹介 Link: Last access 2020/01/25.

コメント欄

各ページのコメント欄を復活させました。スパム対策のため、以下の禁止ワードが含まれるコメントは表示されないように設定しています。レイアウトなどは引き続き改善していきます。「管理人への質問」「フォーラム」へのバナーも引き続きご利用下さい。

禁止ワード: http, the, м (ロシア語のフォントです)


このページにコメント

Name:


Comment:



これまでに投稿されたコメント

Date Name Comment