gnuplotでタイトルや軸ラベルを付けるとグラフ領域が小さくなってしまう件について

gnuplotではコマンドでどういうグラフにしていくのかを設定していくので、割りと均一なものが作りやすいです。マウスでいろいろ編集出来るソフトと比較すると、始めは結構とっつきにくい感じはありますが、コマンドさえ把握していれば同じ形式のグラフがすぐに描けるのは利点となるでしょう。

設定によってグラフ領域の大きさが変わってしまう

ただ、gnuplotで同じグラフを描いているつもりでも、微妙に違ったものが出来てしまうことがあります。
よくあるのが、グラフにタイトルを追加した場合。

例えば、これはタイトル無しでそのままプロットした場合のグラフ。
 で次がタイトルを設定してプロットした場合のグラフ。
一見するとタイトルのあるなしだけで同じグラフに見えますが、重ねて表示すると次のようになります。
グラフの縦の幅が微妙に違っているのが分かりますね。
さらにタイトルだけでなく、x軸、y軸の軸ラベルも追加していくと、より違いが顕著になっていきます。
以下はxlabel, ylabel, x2label, y2label, titleを設定してグラフにしたもの。
先程と同様に何も設定していないグラフに重ねてみると
となるわけです。ここまでになるとだいぶ違いがあるのが分かります。
一つだけグラフを描くだけならいいんですが、例えば2つのグラフを左右で並べて比較したい場合では、比較するモノ同士でグラフ領域が異なってしまっているとよろしくはないです。

なぜグラフ領域の大きさが変わってしまうのか?

gnuplotではグラフ領域の大きさはmargin(マージン)の設定で変更することが出来ます。
で、デフォルトではこのmarginの値はcomputed automatically、つまり自動で計算され設定されるようになっています。なので、タイトルや軸ラベルを配置するとそれに合わせてmarginが設定され、グラフ領域の大きさも変わってきます。 (と、自分なりに解釈はしてますが、ドキュメントの読み逃しもあるかもなので詳しくはそちらを読んで下さい)

なので、グラフ領域を決まった大きさにしたい場合はmarginを自動ではなく手動で設定することになります。

marginの設定

marginの設定はグラフ領域の上下左右の4つ。
  • lmargin (左側)
  • rmargin (右側)
  • tmargin (上側)
  • bmargin (下側)
でそれぞれsetで設定します。上下左右それぞれに対して設定することになりますが、4つ一度に設定するには
gnuplot> set margin 10,10,3,3
のようにします。数字の並びは「左側,右側,下側,上側」です。で、marginで設定する数字は1文字の縦もしくは横幅らしいのですが、実際設定してみてもどうも上下と左右で同じ数字でも結構幅に違いがありました。どうにも挙動がよく分からないので、ここは実際に使ってみて値を決めていく必要があるでしょう。

また「set margin」に「at screen」というキーワードを用いると、数字が文字ではなくscreen領域の割合の扱いになるようです(詳しくはドキュメントやヘルプ参照)。

marginを設定している場合のタイトルや軸ラベルの扱い

ではmarginを手動で設定している場合に、タイトルや軸を設定するとどうなるでしょうか?
この疑問に関しては、デフォルトでは自動設定だったのを固定設定に変えるわけなので、タイトルや軸を追加しようがグラフ領域はその設定で描かれることになります。
例えば
gnuplot> set margin 20,20,5,5
とmarginを設定した場合でタイトルや軸ラベルのありなしでプロットすると、以下の2つのようになります。
両方を比べて分かるように、グラフ領域の大きさは同じで、タイトルや軸ラベルはその外側にくるという扱いになります。

最後に

今回はmarginの設定について説明しましたが、gnuplotは設定が多岐に渡っていて細かい部分まで把握するのがなかなか大変です。なので、細かい部分の調整は実際に使ってみながらドキュメントなどを参照して設定していく必要がありますね。


その他、gnuplot関連のブログ記事

コメント

スポンサーリンク


このブログの人気の投稿

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

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

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

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

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