自動インデックスをラベル化するには (Gnuplot 4.2)
Gnuplot の 2 次元プロットを考える. (3 次元でもほぼ同様)
通常データのプロットでは、 y 座標だけのデータか、 x, y 座標のデータを与える.
それぞれ、 using に使われる列番号は以下のように対応する。
データ | $0 | $1 | $2 |
---|---|---|---|
y 座標のみ | 自動インデックス | y | なし |
x, y 座標 | 自動インデックス | x | y |
したがって、 y 座標のみの場合、using 1
が省略されたとみなされるが、これは using 0:1
と指定されたのと同じことになる。つまり、 x 座標としては自動的に 0 からの整数値が振られる。
さて、 with labels
スタイルをつけた場合、第3番目のデータがラベルとなる。この場合、省略すると 1:2:3
とみなされる。当然、 1 または 2 カラムしかないデータの場合、何も表示されない(この場合はエラーもでない)。
で、ラベルとして、自動インデックスを使いたい。つまり、 using 1:2:0
をやりたいのだが、実際にはうまくいかない*1。using 1:2:2
は意図したとおり、第2カラムが表示される。using 1:2:($0)
もできない。using 1:2:(stringcolumn(0))
はなぜかエラー。
で、 gprintf
関数を噛ませればいけるらしい。
plot 'hoge' using 1:2:(gprintf("%.0f", $0)) with labels
gprintf の書式指定には整数が無いので、実数 (f
) の小数点以下の桁数を 0 にするのがポイント。
最近のバージョン (4.6 で確認) では、単に 0
を指定するだけで実現できるようになっている。
自動インデックスの種類
カラム番号には、 0
の他、 -1
, -2
もある。
負のカラム番号を参照するには?
using
では、カラム番号を直接指定するか、()
で囲まれた式によるデータ値を書くの。後者の場合は指定したカラムの値は $n
で指定する。しかし、 $-1
, $(-1)
, ${-1}
などと書くことはできない。
このような場合、 column(-1)
を使えばよい。たとえば、上でやったようなプロットは gprintf("%.0f", column(-1))
とすればよい。
点とラベルを同時に付ける
と、いうことは、標準の機能ではできないので、以下のように2つのプロットを重ねる。
plot \ "hogehoge" using 1:2:(gprintf("%.0f", $0)) w labels offset 1,1, \ "" w lp
同じファイルのプロットは、空文字列を指定すればよい。それから、 offset
が指定できることはドキュメントのどこにも載ってない気がする。
*1:バグなのかもしれない。報告してみる価値はある