三角ダイアグラムを描く(Drawing ternary diagrams)

English

地球科学の分野では2成分のxyグラフに加え,3成分のxyz三角ダイアグラム(三角グラフ)をよく使います.ここでは三角ダイアグラムについての説明とグラフの描き方をまとめています.

三角ダイアグラムとは

三角ダイアグラムは,3成分のデータを三角形のグラフにプロットしたものです.3成分の相対的な割合(組成データ)によって,三角形の中の位置が決まります.プロットされた点から各辺へおろした線の位置が,それぞれの成分の大きさを示しています(図1).例えば,図中の点Pは,XYZ成分の比が0.2:0.2:0.6になっています.

XY

グラフを描くには,3成分 (x, y, z) のデータをX-Y座標で描けるように2成分 (X, Y) に変換します.ここで,三角ダイアグラムは(x, y, z)を左下から反時計回りにプロットするとします.また,三角形の一辺の長さは1としています.ここで,x+y+z=1(組成データ)であるとき,(X, Y)の値は,xとzのみで決定されます.

XY

上の計算ができれば専用のソフトがなくても,Excelなどの表計算ソフトで点をプロットすることができます.

以下では,市販のソフトを使わずに,フリーのソフトを使って三角ダイアグラムを描く方法を集めてみました.

三角ダイアグラムを描いてみる

ΔPlot

ΔPlot (Delta Plot) はフリーの三角ダイアグラム描画ソフトです.詳しい説明はここにあります.地球科学で使われている識別図のテンプレートが数多く付いています.MacOS10.2以上が必要です.MacOS9以下とWindowsでは動きません.Macが使えるなら,これが一番手軽でしょう.

Gnuplot

GnuplotはWin, Mac, Unixなどで動作するフリーのグラフ描画ソフトです.2Dと3Dのグラフが描けますが,三角ダイアグラムを直接描くことができません.そこで,グラフを描かせる前に,データを処理する必要があります.ここではawkを使ってgnuplotのスクリプト内で処理します.

例えば次のような3成分(x成分, y成分, z成分)のデータがあったとします.ファイル名はdata.datとでもしましょう.

32.4  21.3  46.3  A
21.1  13.4  65.5  B
72.4  5.2   22.4  C
33.3  30.3  36.4  D
0.3   1.2   98.5  E
70.5  29.1  0.4   F

次のようなgnuplotのスクリプトdata.gplとして保存します.Gnuplotでdata.gplを実行するとternary_gpl.epsが生成されます.

set terminal postscript enhanced 18
set bmargin 3
set lmargin 3
set rmargin 3
set tmargin 3
set size ratio 0.866
set yrange [0:0.866]
set xrange [0:1]
set noborder
set noxtics
set noytics
set label 'Y' at 0, -0.03 center
set label 'Z' at 1, -0.03 center
set label 'X' at 0.5, 0.886 center
set output 'ternary_gpl.eps'

set style line 1 lt 1 lw 3 pt -1 ps 1
set style line 2 lt 5 lw 1 pt -1 ps 1

# x
set arrow 1 from 0,0 to 1, 0.0 nohead linestyle 1
set arrow 2 from 0.1,0 to 0.55, 0.779 nohead linestyle 2
set arrow 3 from 0.2,0 to 0.60, 0.693 nohead linestyle 2
set arrow 4 from 0.3,0 to 0.65, 0.606 nohead linestyle 2
set arrow 5 from 0.4,0 to 0.70, 0.520 nohead linestyle 2
set arrow 6 from 0.5,0 to 0.75, 0.433 nohead linestyle 2
set arrow 7 from 0.6,0 to 0.80, 0.346 nohead linestyle 2
set arrow 8 from 0.7,0 to 0.85, 0.260 nohead linestyle 2
set arrow 9 from 0.8,0 to 0.90, 0.173 nohead linestyle 2
set arrow 10 from 0.9,0 to 0.95, 0.0866 nohead linestyle 2

# z
set arrow 11 from 1, 0 to 0.50, 0.866 nohead linestyle 1
set arrow 12 from 0.95, 0.0866 to 0.05, 0.0866 nohead linestyle 2
set arrow 13 from 0.90, 0.173 to 0.10, 0.173 nohead linestyle 2
set arrow 14 from 0.85, 0.260 to 0.15, 0.260 nohead linestyle 2
set arrow 15 from 0.80, 0.346 to 0.20, 0.346 nohead linestyle 2
set arrow 16 from 0.75, 0.433 to 0.25, 0.433 nohead linestyle 2
set arrow 17 from 0.70, 0.520 to 0.30, 0.520 nohead linestyle 2
set arrow 18 from 0.65, 0.606 to 0.35, 0.606 nohead linestyle 2
set arrow 19 from 0.60, 0.693 to 0.40, 0.693 nohead linestyle 2
set arrow 20 from 0.55, 0.779 to 0.45, 0.779 nohead linestyle 2

# y
set arrow 21 from 0.50, 0.866 to 0,0 nohead linestyle 1
set arrow 22 from 0.05, 0.0866 to 0.1,0 nohead linestyle 2
set arrow 23 from 0.10, 0.173 to 0.2,0 nohead linestyle 2
set arrow 24 from 0.15, 0.260 to 0.3,0 nohead linestyle 2
set arrow 25 from 0.20, 0.346 to 0.4,0 nohead linestyle 2
set arrow 26 from 0.25, 0.433 to 0.5,0 nohead linestyle 2
set arrow 27 from 0.30, 0.520 to 0.6,0 nohead linestyle 2
set arrow 28 from 0.35, 0.606 to 0.7,0 nohead linestyle 2
set arrow 29 from 0.40, 0.693 to 0.8,0 nohead linestyle 2
set arrow 30 from 0.45, 0.779 to 0.9,0 nohead linestyle 2

plot "<awk '{print ($1+2*$3)/(2*($1+$2+$3)), sqrt(3)*$1/(2*($1+$2+$3))}' data.dat" t 'data' w p pt 7
ternary_gpl

Gnuplotはeps以外にもpdf, png, jpg, gifなど様々なファイル形式で出力できます.

TOPに戻る

GMT

GMTはもともとマッピング用のソフトですが,XYグラフも描けます.先程のdata.datファイルを用意します.次のスクリプトをternary.gmtとして保存し,実行すると,ternary_gmt.epsが生成します.

#!/bin/sh
# Ternary diagrams
gmtset PAPER_MEDIA a4+
gmtset LABEL_FONT_SIZE 10

t_title="X"
l_title="Z"
r_title="Y"
outfile=ternary_gmt.eps

side=15
psxy -R0/1/0/1 -JX$side -P -K /dev/null > $outfile

# Bottom axis:
psbasemap -R -JX -O -K -Bf0.1S >> $outfile

pstext -JX -R -O -K -V -N <<EOD>>$outfile
-0.05  -0.05  24  0  0	1  $l_title
0.48   0.88   24  0  0	1  $t_title
1      -0.05  24  0  0	1  $r_title
EOD

# Left tilted axis
echo "gsave -30 rotate" >> $outfile
psbasemap -R -JX -O -K -Bf0.1W >> $outfile
echo "grestore" >> $outfile
x=`gmtmath -Q $side $side 30 COSD MUL SUB =`
y=`gmtmath -Q $side 30 SIND MUL NEG =`
psxy -R -JX -O -K -X$x -Y$y /dev/null >> $outfile

# Right tilted axis
echo "gsave 30 rotate" >> $outfile
psbasemap -R -JX -O -K -Bf0.1E >> $outfile
echo "grestore" >> $outfile
x=`gmtmath -Q $x NEG =`
y=`gmtmath -Q $y NEG =`
psxy -R -JX -O -K -X$x -Y$y /dev/null >> $outfile

awk '{print ($1+2*$3)/(2*($1+$2+$3)), sqrt(3)*$1/(2*($1+$2+$3))}' data.dat | \
    psxy -JX -R -O -V -Sc0.18 -G0 -N >> $outfile
ternary_gmt.png

またデータファイルの4列目がラベルであれば,先のスクリプトの途中に次のような一行を加え,グラフにラベルを付けることもできます.

awk '{print ($1+2*$3)/(2*($1+$2+$3))+0.005, sqrt(3)*$1/(2*($1+$2+$3))+0.005, 12, 0, 0, 1, $4}' data.dat | \
    pstext -JX -R -O -V -K -N >> $outfile
ternary_gmt2.png

TOPに戻る

R

RはS 言語に基づいたデータ解析用の環境で,フリーで公開されています.高機能な統計解析とグラフィックを扱えます.Unix, Macintosh, Windows のどのOS上でも動きます.Rの使い方は,ここここが非常に参考になります.

Rで三角ダイアグラムを描くには,以下のような方法があります.

  1. ade4パッケージに含まれるtriangle.plotを使う
  2. ternary.plotを使う
  3. パッケージplotrixに含まれるtriax.plotを使う
  4. パッケージcompositionsを使う
  5. 自作する

1. ade4 パッケージに含まれるtriangle.plotを使う

ade4をインストールしていなければ,Rを立ち上げて,CRANからインストールしましょう.

> install.packages("ade4")
> require(ade4)

先ほどのデータファイルを,4列目をラベルとして読み込みます.

table <- read.table("data.dat", row.names = 4)

うまく読み込めていれば,tableと入力すると内容が表示されます.

> table
    V1   V2   V3
A 32.4 21.3 46.3
B 21.1 13.4 65.5
C 72.4  5.2 22.4
D 33.3 30.3 36.4
E  0.3  1.2 98.5
F 70.5 29.1  0.4
>

三角ダイアグラムを描くには.triangle.plotを使います.使い方を調べるには以下のようにします.

> help("triangle.plot")
triangle.plot(ta, label = as.character(1:nrow(ta)), clabel = 0, cpoint =
1, draw.line = TRUE, addaxes = FALSE, addmean = FALSE, labeltriangle =
TRUE, sub = "", csub = 0, possub = "topright", show.position = TRUE,
scale = TRUE, min3 = NULL, max3 = NULL, box = FALSE)

triangle.plotには,以下のオプションがあります.括弧内はデフォルトの値です.

普通の三角ダイアグラムは次のように描きます.ただし,このままでは,今までのグラフとラベルと軸の位置が異なります.データ行の1列目は左軸の上から下に,2列目は下軸の左から右に,3列目は右軸の下から上に増加するようにプロットされます.

triangle.plot(table, show.position=FALSE, scale=FALSE)
ade4-ex1.png

ここまでを一つのスクリプトにまとめて,読み込ませることもできます.テキストエディタで以下のようなファイル(ade4-ex1.R)をデータファイル(data.dat)と同じフォルダに作成します.

require(ade4)
table <- read.table("data.dat", row.names = 4)
pdf("ade4-ex1.pdf")
triangle.plot(table, show.position = FALSE, scale = FALSE)
graphics.off()

ade4-ex1.Rを作成したフォルダでRを起動して,以下のようにade4-ex1.Rを読み込めばグラフが作成されます.この場合,グラフはade4-ex1.pdfというpdfファイルに出力されます.

> source("ade4-ex1.R")

ade4のサイトにtriangle.plotを使用した図の例があります(こちら).

2. ternary.plotを使う

先程のtriangle.plotを参考にして,ternary.plotを作成しました.これは,単体で動作するため,ade4パッケージをインストールする必要はありません.triangle.plotとは以下の点で異なります.また,triangle.plotにあったいくつかの機能は省略しています.

ternary.plot (dat, label = rownames(dat), clabel = 0,
  cpoint = 1, cline = 0, lwd = 1, addline = TRUE, label.vertices = TRUE)

基本的な使い方は,triangle.plotと同じです.このternary.plotを作業ディレクトリに置いておき,読み込みます.

source("ternary.plot")
table <- read.table("data.dat", row.names = 4)
pdf("ternary.plot-ex1.pdf")
ternary.plot(table)
graphics.off()

上のスクリプトをternary.plot-ex1.Rとして保存し,実行するとternary.plot-ex1.pdfが作成されます.

> source("ternary.plot-ex1.R")
ternary.plot-ex1.png

3. plotrixパッケージに含まれるtriax.plotを使う

plotrixは様々なグラフを描くためのパッケージで,以下のようなグラフを作成できます.

Pie, 3D pie, and Gantt charts, specialized barplots, radial, triangle and soil texture plots, feather plot, wind rose,
> install.packages("plotrix")
> require(plotrix)

として,インストールします.詳しくは,plortixのマニュアルを参照して下さい.

4. compositionsパッケージを使う

compositionsは様々な組成データを扱うためのパッケージです.以下のようにしてインストールします.

> install.packages("compositions")
> require(compositions)

三成分のデータであれば,以下のようにしてグラフを作成できます.

> plot.acomp(data)
compositions-ex1.png

例文(compositions-ex1.R)と作成した図(compositions-ex1.pdf)です.詳しくは,Introductionマニュアルを参照して下さい.


Back