gnuplot : splotでデータファイルをプロットする際に格子状ラインで結ぶようにする方法
splotによる3次元プロット表示
gnuplotではplotコマンドによる2次元グラフ表示に加え、splotコマンドによる3次元グラフ表示が出来るのも大きなポイントです。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列ブロック分けのプロット |
- 各ブロックのデータの個数が一致している必要
書き方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列でブロック分けのプロット |
このデータの書き方ではx,y,zをちゃんと書き表すので、読む分には分かりやすいです。ただこの書き方にも制約があり、書き方1.と同様に
- 各ブロックのデータの個数が一致している必要
なお一致している必要があるのは個数についてであって、各x、yの値はそれぞれのブロック同士で一致している必要はありません。以下のグラフはわざとxとyの値を各ブロックでずらしたものです(3次元プロットを真上から見ている)。これでも格子状表示となることがわかります。
各ブロックで異なる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オプションでプロット |
3次元プロットを真上から見れば分かるように、x, yの値が固定され正方形の格子となっていることが分かります(見た目は正方形ではないですが、数値上は正方形)。
matrixオプションでプロットしたものを真上から見た場合 |
nonuniform matrixオプション
matrixオプションにはこの他に "nonuniform matrix" というオプションを指定するプロットがあります。言葉で説明するのが難しいのですが、matrixオプションでは正方形の格子となるのに対して、nonuniform matrixオプションでは任意の長方形格子となるプロットが出来ます。こちらのデータの書き方はドキュメントの方を参照して下さい。まとめ
今回説明したのは簡単な範囲なのですが、なにぶん書き方の種類がいくつもあるため内容が長くなってしまいました。ここで説明した他にバイナリデータのプロットなどもあったり、応用的におもしろい形のプロットとなるような書き方があったりもします。そのへんに関しては、また別の解説記事の方で書いていこうと思います。gnuplot関連のブログ記事
コメント
コメントを投稿