ベン図

Rにてベン図を描く。Rにはベン図を描くライブラリーがいくつか存在するが、"VennDiagram"が最もきれいにベン図を描ける。別のライブラリー"gplots"でも簡単にベン図を描くことができる。まず、"VennDiagram"を用いたベン図の描き方について。まずはライブラリー"VennDiagram"を以下のコマンドにてインストールし読み込む。既にインストールしている場合は、1行目のコマンドは不要。

1|$install.packages("VennDiagram", repos="http://cran.ism.ac.jp/")
2|$library(VennDiagram)

以下のような2つのファイル"foo.txt"および"bar.txt"からベン図を作成する。それぞれのファイルには","で区切られた英単語が数十個ずつ格納されている。

a, about, according, an, and, are, associated, because, but, by, certain, comprehensively, Diagrammatic, diagrams, different, earlier, easy, entitled, fact, first, formal, formalized, generalize, he, history, however, in, introduced, is, it, John, Journal, logic, Magazine, Mechanical, much, not, of, On, originated, paper, Philosophical, popularly, propositions, Propositions, Reasonings, represent, Representation, rightly, Ruskey, Science, surveyed, that, the, The, their, them, these, They, to, trace, types, usage, use, Venn, was, ways, were, Weston, with
A, acceptance, acquainted, and, any, article, as, be, been, book, called, century, circles, Circles, Clarence, commonly, devices, diagram, diagrammatic, did, during, Eulerian, Eulerian, even, example, familiarly, first, For, general, has, have, himself, his, in, into, introduced, invention, Irving, last, Lewis, logic, Logic, logical, made, many, may, met, nature, no, not, object, of, Of, one, only, opening, or, professional, readers, referred, representation, schemes, Schemes, sentence, so, study, such, supposed, Survey, Symbolic, term, that, the, The, their, these, those, to, treatises, use, Venn, viz, was, who, with, writes

これらのファイルがあるディレクトリに移動し、以下のコマンドにて、ファイルの内容をそれぞれ変数"foo"および"bar"に格納する。"sep"は何によって値が区切られているかを指定するオプションである。","で値が区切られている場合はsep=","と指定する。"strip.white"はスペース等の空白を削除するためのオプションである。ファイルの内容の読み込みはread.table("clipboard")でも便利である。クリップボードからデータを読み込める。

1|$foo=as.matrix(read.table("foo.txt",sep=",",strip.white=T))
2|$bar=as.matrix(read.table("bar.txt",sep=",",strip.white=T))

このように読み込んだデータから以下のコマンドにてリストを作成し、変数"data"に格納する。変数"foo"および"bar"はそれぞれ"FOO", "BAR"と名付ける。

1|$data=list(FOO=foo,BAR=bar)

以上で作成したリスト"data"から以下のコマンドにてベン図を作成する。コマンド"venn.diagram"は作成したベン図を画像としてカレントディレクトリに吐き出す。そのときのファイル名を指定するのが"filename"オプションである。"fill"では各データセットの領域を塗りつぶす色を指定できる。データセットを2つ用いた場合はc(数字1,数字2)で指定する。3つのデータセットからベン図を描いたときはc(数字1,数字2,数字3)となる。"lty"は各データセット領域の枠線を指定するオプションである。基本的には"fill"と同様に指定するが、以下のように"lty=数字"のように唯一の数字を指定した場合は全データセットで同じ枠線が使用される。"scaled"は各データセットの領域の面積をデータ数に応じて表示させるオプションである。"scaled=F"とした場合は各データセット領域の面積は等しく表示される。"cex"は各領域のラベル (以下の69, 17, 53)のフォントサイズを指定するオプションである。2つデータセットからベン図を描くと3つの領域ができるので"cex=c(2,2,2)"のように3つの数字を指定する。"cat.pos"はカテゴリー名 (以下のFOOおよびBAR) の位置を指定する。各カテゴリー名について0から360度の範囲で指定できる。"cat.dist"はカテゴリー名の領域からの距離を指定するオプションである。負の値を入力するとカテゴリー名は円の内に表示される。"cat.cex"はカテゴリー名のフォントサイズの指定である。その他のオプションは以下にまとめた。

1|$venn.diagram(data, filename="foo_bar.tiff", fill=c(4,7), lty=2, scaled=F, cex=c(2,2,2), cat.pos=c(330,30), cat.dist=c(0.05,0.05), cat.cex=c(1.2,1.2))

以下のようにベン図が描かれる。

最初のベン図

ここで、領域の色および枠線を変え、"scaled"を"TRUE"にする以下のコマンドを打つ。

1|$venn.diagram(data, filename="foo_bar.tiff", fill=c(5,6), lty=c(1,3), scaled=T, cex=c(2,2,2), cat.pos=c(330,30), cat.dist=c(0.05,0.05), cat.cex=c(1.2,1.2))

以下のように表示が変わる。領域の色と枠線のスタイルが変わり、データセットの大きさを反映した円の大きさになる。

次のベン図

オプションには以下のようなものがある。

OptionDescriptionUsage example
lwd枠線の太さの指定lwd=c(1,2)
lty枠線のスタイルの指定lty=c(2,2)
col枠線の色の指定col=c(3,5)
fill領域の色の指定fill=c(2,7)
alpha領域の透明度の指定alpha=c(0.2,0.5)
label.col各領域のラベル (上の69, 17, 53) の色の指定label.col=c(1,2,3)
cex各領域のラベルフォントサイズの指定cex=c(1,2,3)
fontface各領域のラベルのフォントデザインの指定fontface=c(1,2,3)
fontfamily各領域のラベルのフォントの指定fontfamily=c(1,2,3)
cat.distカテゴリー名 (上のFOOおよびBAR) の枠線からの距離の指定cat.dist=c(0.05,0.05)
cat.posカテゴリー名の位置の指定 (0から360度)cat.pos=c(30,330)
cat.cexカテゴリー名のフォントサイズの指定cat.cex=c(1,2)
cat.colカテゴリー名の表示色の指定cat.col=c(2,1)
cat.fontfaceカテゴリー名のフォントデザインの指定cat.fontface=c(3,4)
cat.fontfamilyカテゴリー名のフォントの指定cat.fontfamily=c(5,6)
margin作成されるベン図画像の余白の指定margin=0.3
scaledデータのサイズを領域の面積に反映する (T) かしないか (F)scaled=F
inverted2データセットからなるベン図の各領域の位置を逆にする (T)inverted=T
height作成されるベン図画像の高さの指定height=3000
width作成されるベン図画像の幅の指定width=3000
resolution作成されるベン図画像の解像度の指定resolution=500

また、当然ながら3つ以上のデータセットに対してもベン図を描ける。以下のような、"baz.txt"を加えてベン図を描く。

also, are, Baron, before, but, by, century, century, Century, diagrams, E, earlier, Euler, Euler-like, even, has, in, invented, it, Leibniz, Leonhard, Lull, much, noted, observes, of, produced, Propositions, Ramon, Reasonings, She, similar, that, the, to, unpublished, Venn, very, was, were, which

まず、以下のコマンドにて変数"baz"に"baz.txt"の内容を読み込む。

1|$baz=as.matrix(read.table("baz.txt",sep=",",strip.white=T))

更に、上と同様にリストを作成する。

1|$data=list(FOO=foo,BAR=bar,BAZ=baz)

最後に、以下のコマンドでベン図を描く。

1|$venn.diagram(data, filename="foo_bar_baz.tiff", fill=c(2,3,4), alpha=0.4, lty=2)

結果は以下のようになる。

3つのデータセットからのベン図

ベン図は上とは別のライブラリー"gplots"でも描くことができる。まず、以下のコマンドにて"gplots"をインストールし読み込む。

1|$install.packages("gplots", repos="http://cran.ism.ac.jp/")
2|$library(gplots)

次に、上と同様に以下のコマンドにて、"foo.txt", "bar.txt"および"baz.txt"をそれぞれ変数"foo", "bar", "baz"に格納する。

1|$foo=as.matrix(read.table("foo.txt",sep=",",strip.white=T))
2|$bar=as.matrix(read.table("bar.txt",sep=",",strip.white=T))
3|$baz=as.matrix(read.table("baz.txt",sep=",",strip.white=T))

以上の変数からリストを作成し、変数"data"に格納する。各変数"foo", "bar", "baz"はそれぞれ"FOO", "BAR", "BAZ"と名付ける。

1|$data=list(FOO=foo,BAR=bar,BAZ=baz)

このように作成したリストから、以下のようにコマンドを打つことでベン図を描くことができる。

1|$venn(data)

結果は以下のようになる。"venn.diagram"と比べてシンプルなベン図が描かれる。

vennによるベン図
このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る