つれづれなる備忘録

日々の発見をあるがままに綴る

gnuplotによるグラフ作成21~3Dデータプロット

 今回はgnuplotによるデータファイルから3Dプロットを実行する方法について紹介する。

atatat.hatenablog.com

1. データファイル形式

3dデータをプロットするためのデータ形式は2通りあるが、X/Y/Zの列ににそれぞれ直接値を入れる形式で、具体的なデータファイルdata3d.txtの書式としては以下のようになる。

# X   Y    Z
  0   0    0
  0   1    1
  0   2    4
  0   3    9
  0   4   16
  0   5   25
            
  1   0    1
  1   1    2
  1   2    5
  1   3   10
  1   4   17
  1   5   26
            
  2   0    4
  2   1    5
  2   2    8
  2   3   13
  2   4   20
  2   5   29
            
  3   0    9
  3   1   10
  3   2   13
  3   3   18
  3   4   25
  3   5   34

2. データファイルから3Dプロット

3次元でプロットするには2次元のときと同様にプロットコマンドの後に読み込むデータファイル名を指定する。

splot "data3d.txt"

特に描画方法を指定しない場合は、以下のようにポイント+でプロットされる。

"3Dデータプロット"
3Dデータプロット

ポイント以外で、例えばラインを用いてグリッド状に描画したい場合は

splot "data3d.txt" with lines

"グリッド状の3Dデータプロット"
グリッド状の3Dデータプロット

グリッド状に表示するには上のデータファイルのようにXの値ごとにデータ数を揃え、Xの値が変わったときに改行したデータ形式にする。 ポイントやドットで3Dプロット行う場合は上のようにデータ数を揃えたり、改行の必要もなくX/Y/Zのデータの組が揃っていればよい。例えばdata3d_2.txt

# X   Y    Z
  1   0    0
  2   1    1
  0   2    4
  0   3    9
  0   4   16
  0   5   25
  2   3   13
  2   4   20
  2   5   29            
  3   0    9
  3   1   10
  3   2   13
  3   3   18
  3   4   25
  3   5   34

これを3Dプロットすると

splot "data3d_2.txt"

ポイント表示による3Dプロットができていることがわかる。

"data3d_2.txtの3Dプロット"
data3d_2.txtの3Dプロット

なおラインを用いて3Dプロットを行うと以下のように、一筆書きのように線が引かれるため見にくいプロットとなってしまう。

"ライン表示による3Dプロット"
ライン表示による3Dプロット

3. マトリックス形式のよる3Dプロット

X/Y/Zの列ににそれぞれ直接値を入れる形式以外でマトリックス形式を用いることができる。具体的にdata3d_mat.txt

0    1    4    9
1    2    5   10
4    5    8   13
9   10   13   18
16   17   20   25
25   26   29   34

この形式はX方向が列、Y方向が行という解釈で、行列の値がZということになる。マトリックス形式のデータを3Dプロットするには

splot "data3d_mat.txt" matrix

以下のようにポイント表示による3Dプロットを描画できる。

"マトリックス形式データの3Dプロット"
マトリックス形式データの3Dプロット

またポイントではなく描画をラインで指定すると

splot "data3d_mat.txt" matrix lines

"マトリックス形式のライン表示による3Dプロット"
マトリックス形式のライン表示による3Dプロット

マトリックス形式のデータはX/Yの値は含まれていないため、軸のラベルをX/Yの値に割り当てる必要がある。そこで以下のようにset xticsを用いてxの値、同様にset yticsを用いてyの値を割り当てる。

set xtics("100" 0, "200" 1,"300" 2)
set ytics("0" 0, "100" 1,"200" 2,"300" 3, "400" 4, "500" 5)
replot

"マトリックス形式3DプロットのXY値割り当て"
マトリックス形式3DプロットのXY値割り当て

4. まとめ

今回はデータファイルから3Dプロットを作成するための、データファイルのデータ形式とコマンドについて紹介した。