Rでベン図を描く

今回は、2018年のサッカーワールドカップロシア大会日本代表選手、2018年キリンカップ日本代表選手、2018年海外クラブに所属する主な選手を適当にリストアップしたので、それらのデータを使ってベン図を描いてみます。

■日本代表キリンカップメンバー
東口順昭、権田修一、シュミット・ダニエル、長友佑都、槙野智章、吉田麻也、佐々木翔、酒井宏樹、室屋成、三浦弦太、冨安健洋、青山敏弘、原口元気、柴崎岳、遠藤航、伊東純也、中島翔哉、南野拓実、三竿健斗、堂安律、大迫勇也、北川航也、川又堅碁

■日本代表ワールドカップロシア大会メンバー
川島永嗣、東口順昭、中村航輔、長友佑都、槙野智章、吉田麻也、酒井宏樹、酒井高徳、昌子源、遠藤航、植田直通、長谷部誠、本田圭佑、乾貴士、香川真司、山口蛍、原口元気、宇佐美貴史、柴崎岳、大島僚太、岡崎慎司、大迫勇也、武藤嘉紀

■海外クラブに所属する主な選手
長友佑都、吉田麻也、酒井宏樹、冨安健洋、原口元気、柴崎岳、遠藤航、中島翔哉、南野拓実、堂安律、大迫勇也、川島永嗣、酒井高徳、長谷部誠、本田圭佑、乾貴士、香川真司、宇佐美貴史、岡崎慎司、武藤嘉紀、久保裕也、カレン・ロバート、宮市亮、小林祐希、井手口陽介、森岡亮太

まず、gplotsパッケージの中のvenn関数を使ってみましょう。

Rのメニュー -> パッケージとデータ->パッケージインストーラで、Rパッケージインストーラのウィンドウを開き、gplotsを選択して、「依存パッケージを含める」にチェックを入れた上で「選択をインストール」します。

gplotsパッケージを読み込みます。

> library(gplots)
次のパッケージを付け加えます: ‘gplots’ 
以下のオブジェクトは ‘package:stats’ からマスクされています: 
    lowess 

データを入力

> kirin18 <- c("東口順昭","権田修一","シュミット・ダニエル","長友佑都","槙野智章","吉田麻也","佐々木翔","酒井宏樹","室屋成","三浦弦太","冨安健洋","青山敏弘","原口元気","柴崎岳","遠藤航","伊東純也","中島翔哉","南野拓実","三竿健斗","堂安律","大迫勇也","北川航也","川又堅碁")

> WC18 <-c("川島永嗣","東口順昭","中村航輔","長友佑都","槙野智章","吉田麻也","酒井宏樹","酒井高徳","昌子源","遠藤航","植田直通","長谷部誠","本田圭佑","乾貴士","香川真司","山口蛍","原口元気","宇佐美貴史","柴崎岳","大島僚太","岡崎慎司","大迫勇也","武藤嘉紀")

> kaigai <- c("長友佑都","吉田麻也","酒井宏樹","冨安健洋","原口元気","柴崎岳","遠藤航","中島翔哉","南野拓実","堂安律","大迫勇也","川島永嗣","酒井高徳","長谷部誠","本田圭佑","乾貴士","香川真司","宇佐美貴史","岡崎慎司","武藤嘉紀","久保裕也","カレン・ロバート","宮市亮","小林祐希","井手口陽介","森岡亮太")

データをそれぞれに名前をつけてまとめます。

> data <- list(KIRIN_2018 = kirin18, WorldCup_2018 = WC18, Kaigai_Club = kaigai)

ベン図を描きます。

> venn(data)

ベン図を保存します。

> png("venn1.png", 300, 300)
> venn(data)
> dev.off()
quartz 
    2 

余白を設定してタイトルをつけてみます。

> par(mar = c(0, 0, 2, 0))
> plot.new()
> venn(data)
> mtext("Japan Team 2018", side = 3, line = 1)


背景を透明化して図として保存しましょう。

> png("venn2.png", 300, 300, bg = "transparent")
> venn(data)
> mtext("Japan Team 2018", side = 3, line = 1)
> dev.off()


次に、Venneulerを使って重なりを計算したベン図を作成してみます。Venneulerでの描画は正確ではありませんが、大まかに重なり具合を知ることができます。

まず、Venneulerパッケージをインストールします。

Rのメニュー -> パッケージとデータ->パッケージインストーラで、Rパッケージインストーラのウィンドウを開き、Venneulerを選択して、「依存パッケージを含める」にチェックを入れた上で「選択をインストール」します。

これでダウンロードされたパッケージが動作すれば問題はありませんが、library(venneuler)でVenneulerを読み込もうとすると、読み込みに失敗した旨のメッセージが出ることがあります。

> library(venneuler)
要求されたパッケージ rJava をロード中です
Error: package or namespace load failed for ‘rJava’:
 .onLoad は loadNamespace()('rJava' に対する)の中で失敗しました、詳細は:
 call: dyn.load(file, DLLpath = DLLpath, ...)
 error:  共有ライブラリ '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so' を読み込めません:
 dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
 Referenced from: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so
 Reason: image not found 
エラー:  パッケージ ‘rJava’ をロードできませんでした

VenneulerはJavaに依存したライブラリで、rJavaがパッケージの動作が必要ですが、rJavaを読み込もうとするとlibjvm.dylibが見つからないというエラーが出るようです。

そこで、R外部関数の呼び出しに使われるdyn.load()で、Java Developer Kitの中のlibjvm.dylibのパスを指定してやりましょう。

> dyn.load("/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/server/libjvm.dylib")

再びVenneulerを読み込んでみます。

> library(venneuler)
Venneuler ロード完了。

gplotsで作成したベン図を元に、それぞれの数値を入力しましょう。

> d<-c(KIRIN_2018 = (10+7+4+2), WorldCup_2018 = (7+2+9+5), Kaigai = (6+7+4+9), "KIRIN_2018&WorldCup_2018" = (7+2), "WorldCup_2018&Kaigai" = (7+9), "Kaigai&KIRIN_2018" = (4+7), "KIRIN_2018&WorldCup_2018&Kaigai"= (7))

内容を確認してみましょう。


> d
                    KIRIN_2018                   WorldCup_2018                          Kaigai 
                            23                              23                              26 
      KIRIN_2018&WorldCup_2018            WorldCup_2018&Kaigai               Kaigai&KIRIN_2018 
                             9                              16                              11 
KIRIN_2018&WorldCup_2018&Kaigai 
                             7 

それでは、venneulerを使って描画してみます。

> v1 <- venneuler(d)
> plot(v1, main = "Up regulated genes (10 fold)", col = c(2,4,3))

pngフォーマットで図を保存します。

> png("venneuler1.png", 300, 300, bg = "transparent")
> plot(v1, main = "Japan Team 2018", col = c(2,4,3))
> dev.off()
quartz 
    2 

その他、VennDiagramやeVennなどのパッケージを使う方法もあります。

以下のサイトにいろいろな方法が紹介されています(英語)
https://stackoverflow.com/questions/8713994/venn-diagram-proportional-and-color-shading-with-semi-transparency

数値を入力することでベン図を描いてくれる便利なサイトもあります。
http://eulerr.co

この記事が気に入ったらサポートをしてみませんか?