実装関連事項

各種プログラミング言語の基本的な書き方やソフトウェア等の使用方法について.

R にてベン図を描く.Rにはベン図を描くライブラリーがいくつか存在するが,VennDiagram は別のライブラリ gplots よりきれいにベン図を描くことができる.最初に,VennDiagram を用いてベン図の描く.はライブラリ VennDiagram を以下のコマンドにてインストールし読み込む.既にインストールしている場合は,1行目のコマンドは不要.

VennDiagramを用いたベン図の描画

$ install.packages("VennDiagram", repos="http://cran.ism.ac.jp/")
$ 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") でも可能.このコマンドを打つとクリップボードからデータを読み込める.

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

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

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

以上で作成したリスト data から以下のコマンドにてベン図を作成する.コマンド venn.diagram は作成したベン図を画像としてカレントディレクトリに吐き出す.そのときのファイル名を指定するのが filename オプションとなる.imagetype には出力ファイルのタイプを指定する.デフォルトは tiff となっている.heightwidth は画像の大きさを指定するオプション.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 はカテゴリー名のフォントサイズの指定である.

$ venn.diagram(data, filename="ida_r_venn_diagram_01.svg", imagetype="svg", height=5, width=5, 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))

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

ida_r_venn_diagram_01.svg

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

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))

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

ida_r_venn_diagram_02.svg

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

オプション詳細使用例
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 の内容を読み込む.

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

上と同様にリストを作成する.

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

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

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

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

ida_r_venn_diagram_03.svg

gplotsを用いたベン図の描画

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

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

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

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

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

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

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

$ venn(data)

結果は以下のようになる.venn.diagram() と比べてシンプルなベン図が描かれる.結果は,BAZ のユニークな個数が上の venn.diagram() で描画したときと異なる.上では21個であったのが以下だと20個になっている.これは,baz.txt の中に重複している単語 (century) が1組あるが,venn.diagram() ではそれをふたつを数え,venn() ではひとつと数えていることによる.

ida_r_venn_diagram_04.svg
Hatena Google+