3要素と限定的になりますが、相対的な割合を表現する図として薬学、化学、遺伝学、ゲーム理論、鉱物学などでは三角ダイアグラム(ternary diagrams)が利用されています。有効な三角ダイアグラムですが、Rでの作成方法を日本語で紹介した例が少ないです。
そこで、ggplot2を通じて三角ダイアグラムを手軽にプロットできる「ggtern」パッケージを紹介します。ggplot2の拡張パッケージですのでプロットの装飾コマンドが共通しています。
パッケージバージョンは2.1.0。実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。
パッケージのインストール
#パッケージのインストール install.packages("ggtern")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#ライブラリの読み込み
library("ggtern")
###データ例の作成#####
TastData <- data.frame(X = runif(10),
Y = runif(10),
Z = runif(10))
########
#三角ダイアグラムを作成:ggternコマンド
TerDia <- ggtern(data = TastData, aes(X, Y, Z))
#内容確認
TerDia
###作成した三角ダイアグラムの体裁を調整###
#シンボルをプロット
TerDiaPoint <- TerDia + geom_point(col = "blue")
#内容確認
TerDiaPoint
#図を回転:theme_rotateコマンド
TerDiaPoint + theme_rotate(90)
#外周に矢印を追加:theme_showarrowsコマンド
TerDiaPoint + theme_showarrows()
#データの分布をグラデーションで表示:stat_density_ternコマンド
ggtern(data = TastData, aes(X, Y, Z)) +
stat_density_tern(geom = "polygon",
aes(fill=..level..),
base = "ilr")
#シンボルから各辺へ線を引く:geom_Tmark,_Lmark,_Rmark,_crosshair_ternコマンド
TmTerDiaPoint <- TerDiaPoint + geom_Tmark(col = "#4b61ba") + labs(title = "geom Tmark")
LmTerDiaPoint <- TerDiaPoint + geom_Lmark(col = "#a87963") + labs(title = "geom Lmark")
RmTerDiaPoint <- TerDiaPoint + geom_Rmark(col = "#505457") + labs(title = "geom Rmark")
CHTerDiaPoint <- TerDiaPoint + geom_crosshair_tern(col = "#deb7a0") + labs(title = "geom chrosshair tern")
#内容確認
grid.arrange(TmTerDiaPoint, LmTerDiaPoint, RmTerDiaPoint, CHTerDiaPoint)
#各頂点から線を引く:geom_Tisoprop,geom_Lisoprop,geom_Risopropコマンド
#位置を指定:valueオプション
TpTerDiaPoint <- TerDiaPoint + geom_Tisoprop(col = "#4b61ba", value = c(.4, .6)) + labs(title = "geom Tisoprop")
LpTerDiaPoint <- TerDiaPoint + geom_Lisoprop(col = "#a87963", value = c(.4, .6)) + labs(title = "geom Lisoprop")
RpTerDiaPoint <- TerDiaPoint + geom_Risoprop(col = "#505457", value = c(.4, .6)) + labs(title = "geom Risoprop")
TLRTerDiaPoint <- TerDiaPoint + geom_Tisoprop(col = "#4b61ba", value = c(.4, .6)) +
geom_Risoprop(col = "#505457", value = c(.4, .6)) +
geom_Lisoprop(col = "#a87963", value = c(.4, .6)) +
labs(title = "ALL isoprop")
#内容確認
grid.arrange(TpTerDiaPoint, LpTerDiaPoint, RpTerDiaPoint, TLRTerDiaPoint)
[/code]
出力例
・geom_Tmark,_Lmark,_Rmark,_crosshair_ternコマンド
・geom_Tisoprop,geom_Lisoprop,geom_Risopropコマンド
少しでも、あなたのウェブや実験の解析が楽になりますように!!