3要素の相対的な割合を表現する図として薬学、化学、遺伝学、ゲーム理論、鉱物学などでは三角ダイアグラム(ternary diagrams)が利用されています。大変有効な表現方法だと思います。
「ggplot2」システムを利用して三角ダイアグラムを手軽にプロットできる「ggtern」パッケージを紹介します。かなり多くのコマンドが収録されているだけでなく、細かい体裁の調整が可能です。
パッケージバージョンは3.4.1。windows11のR version 4.2.2で確認しています。
パッケージのインストール
#パッケージのインストール install.packages("ggtern")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#ライブラリの読み込み library("ggtern") ###データ例の作成##### #tidyverseパッケージがなければインストール if(!require("tidyverse", quietly = TRUE)){ install.packages("tidyverse");require("tidyverse") } #viridisパッケージがなければインストール if(!require("viridis", quietly = TRUE)){ install.packages("viridis");require("viridis") } set.seed(1234) TestData <- tibble(X = runif(30), Y = runif(30), Z = runif(30)) ######## #三角ダイアグラムの基本を作成:ggternコマンド TerDia <- ggtern(data = TestData, aes(X, Y, Z)) #内容確認 #TerDia #TerDiaに「geom_point」「geom_line」を追加 TerDiaPoint <- TerDia + geom_point(col = "blue") + geom_line(col = "red") #三角ダイアグラムの基本が完成 #以降「TerDiaPoint」を調整していきます TerDiaPoint #収録テーマを紹介 TerDiaPoint + #青緑茶の色合いを適応:theme_rgbwコマンド theme_rgbw() + #他の色合いのテーマ #theme_gray(),theme_dark(),theme_rgbg(), #theme_tropical(),theme_bluedark(),theme_bluelight(), #theme_bvbw(),theme_bvbg() #矢印長さを調整:theme_arrowlengthコマンド1 #開始,終了:startオプション;0-1,初期値:getOption("tern.arrow.start") #finishオプション;0-1,初期値:getOption("tern.arrow.start") theme_arrowlength(start = 0.5, finish = 1) #以下矢印に関するテーマ #theme_arrowsmall(),theme_arrowshort(),theme_arrownormal(), #theme_arrowdefault(),theme_arrowlarge() #指定した辺から線を引く:geom_Tline/geom_Lline/geom_Rlineコマンド #開始位置:T|L|Rinterceptオプション;0-1 #矢印設定:arrowオプション;ggplot2::arrow()コマンドと組み合わせる TerDiaPoint + #左から右側:geom_Tlineコマンド geom_Tline(Tintercept = .5, arrow = ggplot2::arrow(), colour = "yellow", size = 1.5) + #底辺から右側:geom_Llineコマンド geom_Lline(Lintercept = .2, arrow = ggplot2::arrow(), colour = "#4b61ba", size = 1.5) + #右側から底辺:geom_Rlineコマンド geom_Rline(Rintercept = .1, arrow = ggplot2::arrow(), colour = "#a87963", size = 1.5) #データ分布をグラデーションで表示:stat_density_ternコマンド #変換方式:baseオプション;identity:直接的なデカルト空間, #ilr:アイソメトリック対数比 ggtern(data = TestData, aes(X, Y, Z)) + stat_density_tern(geom = "polygon", aes(fill = ..level..), base = "ilr") + scale_fill_viridis() #データ分布を六角形で表示:stat_geom_hex_ternコマンド #ビンを設定:binwidthオプション;0-1 TerDiaPoint + geom_hex_tern(binwidth = 0.1) + scale_fill_viridis() #図を回転:theme_rotateコマンド #度数:degreesオプション TerDiaPoint + theme_rotate(degrees = 90) #外周に矢印を追加:theme_showarrowsコマンド TerDiaPoint + theme_showarrows() #各外周矢印のラベル名を変更:Tarrowlab/Larrowlab/Rarrowlabコマンド TerDiaPoint + theme_showarrows() + #右側 Tarrowlab(label = "からだに") + #左側 Larrowlab(label = "いいもの") + #底辺側 Rarrowlab(label = "たまに更新") #各頂点のラベル名を変更:Tlab/Llab/Rlabコマンド TerDiaPoint + #上 Tlab(label = "からだに") + #左下 Llab(label = "いいもの") + #右下 Rlab(label = "たまに\n更新") #各シンボルから各辺へ線を引く: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)
出力例
・三角ダイアグラムの基本を作成:ggternコマンド
・収録テーマを紹介
・指定した辺から線を引く:geom_Tline/geom_Lline/geom_Rlineコマンド
・データ分布をグラデーションで表示:stat_density_ternコマンド
・データ分布を六角形で表示:stat_geom_hex_ternコマンド
・図を回転:theme_rotateコマンド
・各外周矢印のラベル名を変更:Tarrowlab/Larrowlab/Rarrowlabコマンド
・各シンボルから各辺へ線を引く:geom_Tmark,_Lmark,_Rmark,_crosshair_ternコマンド
・各頂点から線を引く:geom_Tisoprop,geom_Lisoprop,geom_Risopropコマンド
少しでも、あなたの解析が楽になりますように!!