gnuplotで縦線を引きたい

概要

gnuplotで描画するグラフにおいて縦線を引きたい。 以下のような感じ。

やり方は2通り

  • やり方(1): 矢じりなし矢印 set arrow from x1, y2 to x2, y2 nohead を利用する
  • やり方(2): with impulse によって特定のポイントへの縦線を描画する (こっちの方が楽かも)

やり方(1): arrowによる方法

set arrow コマンドは矢印を描画可能です。 (x1,y1) から (x2,y2) への矢印を描画するには以下の様な命令をします。

set arrow from x1, y1 to x2, y2

そんでもって、矢じり部分を消すには nohead を利用します。 矢印から矢じり部分を消すと直線になります。

set arrow from x1, y1 to x2, y2

これを利用して、 (x1,y1), (x2,y2) をうまいこと設定すれば 縦線を引くことが可能ですね。

f(x) = x ** 2
set arrow from 5,0 to 5,25 nohead lt 3
plot f(x)

これだけです。

因みに、 arrow を間違えてしまったなどで消したいときには show arrow で番号を確認して、 unset arrow <number> で消せます。

# ここで確認して
show arrow
# ここでその番号の arrow を消す
unset arrow 1

やり方(2): with impulse による方法 (おすすめ)

座標を指定し、 with impulse によって縦方向の直線を描くことができます。こちらはやり方(1) に比べて終端のみ指定すればよいのが楽なポイント。

具体的には以下のようなコマンドになります。実際に利用する際には x y を直線を引きたい座標に置き換えてください。

plot "< echo x y" with impulse title ""
# 極限まで省略すると以下でもOK
p "< echo x y" w i t ""

やり方(1)で示したように単純なxの二次関数に線を引く場合は、例えば以下のようになります。

f(x) = x**2
set xrange[-10:10]
plot f(x), "< echo 5 25" with impulse title ""

ちなみに、 title "" がついているのは不要な凡例表示を消すためです。 arrow と異なりグラフ描画扱いになりますので、title指定を何もしてしないと妙な名前のグラフがいることになってしまいます。

説明

このコマンドで利用されている <はシェルで利用されるリダイレクトの一種で、ほかのコマンドからのインプットを矢印方向に流すような役割を持ちます。この場合ですと、 echo x y というコマンドの結果を plotコマンドに対して渡していることになります。渡されるのは echo コマンドの結果になりますので、最終的に何をやっているのに等しいかというと、

x y

と記述されているだけのファイルを data.dat として保存し、

plot "data.dat" with impulse

とコマンドを打っているのと同じです。ただ、これだけの為にわざわざ別ファイルを準備するのは面倒なので、今回のようにリダイレクトを利用してplotした方が楽ということですね。逆に、いっぱい縦線を引きたい場合には別ファイルを準備した方がよいかもしれません。

コメント

このブログの人気の投稿

gnuplot: グラフの色を変更する

[Linux] rsyncで進捗を確認する