gnuplot : splotでデータファイルをプロットする際に格子状ラインで結ぶようにする方法

splotによる3次元プロット表示

 gnuplotではplotコマンドによる2次元グラフ表示に加え、splotコマンドによる3次元グラフ表示が出来るのも大きなポイントです。

splot、関数プロットの例
splot、関数プロットの例

splotでの格子状表示

 関数プロットでは上のグラフのような格子状のラインで結ばれたグラフになるのですが、データファイルプロットの場合はデータの書き方が重要になってきます。このデータの書き方が結構失敗しやすく、データファイルプロットでうまく格子状にならない原因ともなります。
 書き方に失敗すると例えば以下のようなグラフになります。x軸に対しては線で結ばれていますが、y軸は線で結ばれていません。
格子状表示にしようとして失敗した場合の例
格子状表示にしようとして失敗した場合の例


 今回は、格子状となるデータの書き方について簡単な範囲で説明していきます。説明では全てを扱うわけではないので、詳しくは公式のドキュメントやその他書籍、Webサイトなどを参考にして下さい。


データファイルで格子状表示にする書き方

書き方1. 数値1列のみでブロック分けをする

 書き方の中でシンプルなものとして、以下のような数値1列のみで改行によりブロック分けする方法があります(なおブロックを分けるとき、改行を2つ以上にすると失敗します)。
2
3
1
5
6

3
1
4
2
5

2
4
1
5
2

 この書き方を説明すると、
  • 個々の数値はzの値
  • ブロック内の数値の個数がxの値(ここでは5つで0〜4)
  • ブロックの個数がyの値(ここでは3つで0〜2)
という扱いになります。

このデータファイルをsplotでプロットすると以下のグラフとなります。
書き方1. 数値1列ブロック分けのプロット
書き方1. 数値1列ブロック分けのプロット
書き方自体はシンプルですが、xやyの値が明示されないため慣れるまでは直感的にやや分かり難い面もあります。また、この書き方では 
  • 各ブロックのデータの個数が一致している必要
があります。各ブロックで異なるデータ個数のファイルをプロットした場合は、格子状表示とはなりません。

書き方2. x,y,zの数値3列でブロック分けをする

 次の書き方はx,y,zの数値3列で書く方法です。
1 1 3
1 2 2
1 3 5
1 4 2
1 5 3

2 1 1
2 2 5
2 3 4
2 4 3
2 5 1

3 1 1
3 2 2
3 3 3
3 4 4
3 5 5

 これをプロットすると以下のグラフとなります。

書き方2. x,y,zの数値3列でブロック分けのプロット
書き方2. x,y,zの数値3列でブロック分けのプロット

 このデータの書き方ではx,y,zをちゃんと書き表すので、読む分には分かりやすいです。ただこの書き方にも制約があり、書き方1.と同様に 
  • 各ブロックのデータの個数が一致している必要
があります。
 なお一致している必要があるのは個数についてであって、各x、yの値はそれぞれのブロック同士で一致している必要はありません。以下のグラフはわざとxとyの値を各ブロックでずらしたものです(3次元プロットを真上から見ている)。これでも格子状表示となることがわかります。
各ブロックで異なるx,yの値でのプロット
各ブロックで異なるx,yの値でのプロット

書き方3. データファイルに格子状にzの値を記述する(matrixオプションが必要)

 書き方3.ではsplotのmatrixオプションを用いる方法のデータファイルの書き方を説明します。データの書き方は以下のようになります。
1 8 2 4 5
2 1 3 7 1
3 1 6 1 2
8 3 9 6 4
3 4 6 1 2

 データの書き方自体を格子状配置とみなして、そのままプロットする方法です。ここでは数値がzの値を表すことになり、x, yの値は正方形の格子状配置となるよう自動で割り当てられます。
z軸の数値のみでmatrixオプションでプロット
z軸の数値のみでmatrixオプションでプロット

 3次元プロットを真上から見れば分かるように、x, yの値が固定され正方形の格子となっていることが分かります(見た目は正方形ではないですが、数値上は正方形)。
matrixオプションでプロットしたものを真上から見た場合
matrixオプションでプロットしたものを真上から見た場合

nonuniform matrixオプション

 matrixオプションにはこの他に "nonuniform matrix" というオプションを指定するプロットがあります。言葉で説明するのが難しいのですが、matrixオプションでは正方形の格子となるのに対して、nonuniform matrixオプションでは任意の長方形格子となるプロットが出来ます。こちらのデータの書き方はドキュメントの方を参照して下さい。


まとめ

 今回説明したのは簡単な範囲なのですが、なにぶん書き方の種類がいくつもあるため内容が長くなってしまいました。ここで説明した他にバイナリデータのプロットなどもあったり、応用的におもしろい形のプロットとなるような書き方があったりもします。そのへんに関しては、また別の解説記事の方で書いていこうと思います。


gnuplot関連のブログ記事

コメント

スポンサーリンク


このブログの人気の投稿

gnuplotでプロットなどの色をcolornameの指定で変更する

catコマンドの出力を行番号付きにするためのコマンドラインオプション(-n, -b)

Ubuntu Softwareが起動しないのでいろいろと調べてみる(Ubuntu 20.04.1 LTS)

gnuplot : グラフにグリッド線を描く方法(set grid)

gnuplot : プロット画像のサイズ指定について(set sizeとの違い)