本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:準面積比例ベン図をプロット「nVennR2」パッケージ

複数の集合の関係を表す図としてはベン図が定番ですが、集合の数が増えると円だけでは重なりを表現しきれず、見やすい図を描くのは難しくなります。nVennR2は、領域を円に限定せず変形させることで、集合数に制限なく「準面積比例(quasi-proportional)ベン図」を作成するパッケージです。ベン図オブジェクトの作成から外観の調整、特定の領域に含まれる要素の取り出しまでを、役割ごとのコマンドで扱えるのが特徴です。

なお、準面積比例とは、各領域の面積がそこに含まれる要素の数におおよそ比例するという意味で、どの重なりに要素が多いのかを面積の大小として一目で把握できます。

パッケージバージョンは2.0.2。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("nVennR2")
# パッケージの読み込み
library("nVennR2")

# nVennDiagramやplotVennでプロット領域に描画したい場合は下記もインストールする
install.packages(c("rsvg", "grImport2"))
スポンサーリンク

コマンド例

詳細はコメント、パッケージのヘルプを確認してください。

この記事で使うサンプルデータ

コード例では、パッケージ同梱のデータではなく自作のデータを使います。3つのSNSサービスA・B・Cのそれぞれの利用者名をまとめた名前付きリストを用意します。この形式(名前が集合名、中身がその集合の要素)は、nVennDiagramが受け付ける標準的なデータ形式です。

# 3つのSNSの利用者名を集合としてまとめる
# 各要素は利用者名、リストの名前が集合名(サービス名)になる
mysets <- list(
  SNS_A = c("sato", "suzuki", "takahashi", "tanaka", "ito"),
  SNS_B = c("suzuki", "tanaka", "watanabe", "ito"),
  SNS_C = c("takahashi", "tanaka", "ito", "yamamoto"))

ベン図オブジェクトを作成:nVennDiagramコマンド

リストのリストやデータフレーム、テキスト表からベン図オブジェクトを作成します。作成したオブジェクトを他のコマンドに渡すことで、描画や外観設定、領域の取得などを行います。

オプション意味初期値
descセットの記述。リストのリスト・データフレーム・テキスト表・ファイルパス・作成済みnVennオブジェクトのいずれかなし
plot生成した図を描画するかどうかを指定TRUE
outFile有効なパスかつ plot が true の場合に SVG コードを保存“”
systemShowplot が true のとき既定のエディタで SVG を開くかどうかを指定FALSE
verbose図の生成過程でメッセージを表示するかどうかを指定TRUE
maxlevel0 より大きい場合、最小化ステップに網羅的アルゴリズムを用い、その値が探索の深さになる0L
byCol入力がテキストの場合、各セットを列(1)か行(2)で指定。0 は自動推測0L
# mysetsからベン図オブジェクトを作成する(生成過程のメッセージは非表示)
myv <- nVennDiagram(mysets, verbose = FALSE)
# 透明度とフォントサイズを指定して外観を調整する
myv <- setVennOpts(myv, opacity = 0.2, fontSize = 14)
透明度とフォントサイズを指定して外観を調整した結果

rsvgとgrImport2を導入していない環境では、上記の実行時に「The figure cannot be rendered in the plot window.」というメッセージが表示され、プロット領域には描画されません。その場合は、下記のようにplotをFALSEにしてオブジェクトだけを作成し、plotVennのoutFileでSVGファイルとして書き出せます。

# 画面描画は省略してオブジェクトだけ作る
myv <- nVennDiagram(mysets, plot = FALSE, verbose = FALSE)
# 外観を調整する(これも描画は省略)
myv <- setVennOpts(myv, opacity = 0.2, fontSize = 14, plot = FALSE)
# 図をSVGファイルとして書き出す
plotVenn(myv, outFile = "mysets.svg")

深さにおける最小化ステップの所要時間の推定:estimateExhaustiveRunTimeコマンド

オプション意味初期値
descセットの記述。ファイルパス・リストのリスト・テキスト・作成済みnVennオブジェクトのいずれかなし
maxlevel網羅的探索(exhaustive)の深さを指定0L
byCol入力テキストのセットを列(1)か行(2)で指定。自動推測も可能0L
# 深さ4で網羅的手法を用いた場合の所要時間(秒)を推定する
estimateExhaustiveRunTime(mysets, 4)

実行結果(推定値は環境により変わります):

[1] 0.0198732

指定した領域に含まれる要素の一覧を取得:getVennRegionコマンド

オプション意味初期値
nVennObjnVennDiagram() で生成したオブジェクトを指定なし
n整数またはセット名のベクトルで領域を指定なし
# 猫と犬、それぞれの飼い主名を集合にしてオブジェクトを作成する
pets <- nVennDiagram(list(Cat = c("Mei", "Rin", "Sora"),
                          Dog = c("Rin", "Sora", "Yuki")),
                     plot = FALSE, verbose = FALSE)
# 「猫と犬の両方を飼っている人」の領域を指定する
# 整数3は2進数で11、右から1・2番目の集合に属する領域を表す
getVennRegion(pets, 3)
[[1]]
[1] "Rin"

[[2]]
[1] "Sora"

透明度やフォントサイズを含むテーマリストで外観を設定:setVennSkinコマンド

複数の外観パラメータをテーマとしてまとめて指定し、図の見た目を一括で設定できます。同じテーマリストを複数のオブジェクトに適用することも可能です。

オプション意味初期値
nVennObjnVennDiagram() で生成したオブジェクトを指定なし
paramssetVennOpts() と同じ引数に、palette と colors を加えたリストなし
plot操作後の図を描画するかどうかを指定TRUE
# 外観をテーマリストとしてまとめる
theme <- list(opacity = 0.2, lineWidth = 2, fontSize = 14,
              showRegions = FALSE, palette = 2, colors = c("red"))
# mysetsからベン図を作成する
myv <- nVennDiagram(mysets)
# テーマリストを適用して外観を設定する
myv <- setVennSkin(myv, theme)

作成済みのベン図オブジェクトを描画して表示させる処理:plotVennコマンド

オプション意味初期値
nVennObj作成した nVenn オブジェクトを指定なし
outFileSVG 図の出力先パスを指定。空の場合は出力されない“”
systemShow既定の SVG エディタで図を開くかどうかを指定する論理値FALSE
# mysetsからベン図オブジェクトを作成する
myv <- nVennDiagram(mysets, verbose = FALSE)
# 作成したオブジェクトを描画する
plotVenn(myv)

指定したファイル名を持つ SVG ファイルから描画を読み込む:readVennSVGコマンド

nVenn が生成した SVG または HTML ファイルを読み込み、図として再描画します。

オプション意味初期値
svgFilenVenn が生成した SVG または HTML のファイル名なし
plot結果の図を描画するかどうかを指定する論理値TRUE
outFile有効なファイルパスかつ plot が true の場合に SVG コードを保存“”
systemShow既定のエディタで SVG ファイルを開くかどうかを指定する論理値FALSE
# ファイルが存在する場合に SVG を読み込んで描画する
if (file.exists('example.svg')){
  readVennSVG('example.svg')
}

領域の可視化や透明度などを設定:setVennOptsコマンド

透明度やフォントサイズなどのグラフィカルパラメータを設定し、図の視認性を調整できます。

オプション意味初期値
nVennObjnVennDiagram() で生成したオブジェクトを指定なし
opacity集合の透明度。0 で透明、1 で不透明0.4
fontSize各領域の要素数を表示するフォントサイズを指定12
lineWidth各セットの境界線の幅。最も近い整数に丸められる1
palette使用する色パレットの整数インデックス(0〜3)を指定0
showRegions領域の説明を表示するかどうかを指定TRUE
showWeights各領域の要素数を表示するかどうかを指定TRUE
plot操作後の図を描画するかどうかを指定TRUE
# mysetsからベン図オブジェクトを作成する
myv <- nVennDiagram(mysets)
# 領域説明を非表示にし、透明度と線幅を設定する
myv <- setVennOpts(myv, showRegions = FALSE, opacity = 0.2, lineWidth = 2)

パレット番号でベン図の色分けパターンを変更する:setVennPaletteコマンド

オプション意味初期値
nVennObjnVennDiagram() で作成したオブジェクトを指定なし
palette0 から 3 までの整数でカラーパレットを選択0
plot適用後の図を描画するかどうかを指定TRUE
# mysetsからベン図オブジェクトを作成する
myv <- nVennDiagram(mysets, verbose = FALSE)
# パレット2を適用する
myv <- setVennPalette(myv, 2)
# パレット3を適用する
myv <- setVennPalette(myv, 3)

コマンド実行時のプロットは省略


この記事が誰かの役に立ちますように。

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。