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した方が楽ということですね。逆に、いっぱい縦線を引きたい場合には別ファイルを準備した方がよいかもしれません。
コメント
コメントを投稿