ウォッチポイントは、関数に対象値を設定できます。その関数は、グラフの各 線分の始点と終点で評価しますが、終点の値が対象値をまたいだ場合、線形補 間ののちにそのヒットした座標 [x,y] を報告します。
plot FOO watch func(...)=targetvalue
以下の自明な例は、その曲線が直線 y = ax + b と交わる場所にラベルを置く というウォッチポイント対象を設定します。[x,y] を評価したとき、関数 Line() は、現在の y 座標から値 ax + b までの偏差を返すので、描画グラフ と直線 ax+b の交点で評価したときには、その関数は 0 を返すことになりま す。そのため我々はこれをウォッチの対象として設定します。
Line(x,y) = (a*x + b) - y plot cos(x) watch Line(x,y)=0, a*x + b
評価の際に、対応する点の x, y, z の値は、それらが名前付きパラメータで あるかどうかに係わらず、その関数に対して有効なので、以下の変種も上の例 と同じ結果を産みます。
Line(dummy1,dummy2) = dummy1*x + dummy2 - y plot cos(x) watch Line(a,b)=0, a*x + b
さらに、インライン関数の代わりの関数ブロックを使っても同じです。
function $Line() << EOF return (a*x + b) - y EOF plot cos(x) watch $Line()=0, a*x + b
以下の例は、描画領域を横断する直線を選択し、そして等高線ラベルは、等高 線がその一つの直線を横切る場所にのみ配置します。
set style watchpoint labels center nopoint font ",9" set style textbox noborder opaque margins 0.5, 0.5 line(a,b) = a*x+b - y a = 0.6; b = 0.5
set contours set cntrparam levels incr 0, .2, 4 set view map
splot f(x,y) with lines nosurface watch line(a,b)=0 label \ sprintf("%.1f",z)
各ラベルを、等高線の z 座標を使って生成します。デフォルトのウォッチポ イントラベル " x : y " は、このグラフでは有益ではないので、等高線の z 値を印字する書式関数を使用しています。
竹野茂治@新潟工科大学