異なるX範囲のデータをプロットしていますが、現在のX範囲のデータの最大値と最小値に応じてyrangeを変更したいと思います。 GPVAL_Y_MAXおよびGPVAL_Y_MINを使用すると、これらの値は範囲内のデータだけでなく、データ全体の最大値と最小値に対応します。
たとえば、次のデータがあります。
1 3
2 5
3 8
4 20
5 30
次のスクリプトを使用します。
plot 'data.txt' u 1:2;
set xrange [1:3];
replot
set xrange [1:5];
replot
最初のプロットではyrangeを[3:8]に設定しますが、2番目のプロットではyrangeを[3:30]に設定します。私のようなものを使用する場合
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]
GPVAL_Y_MINとGPVAL_Y_MAXは、xrangeに関係なく同じ値を持ちます。
解決策はありますか?
必要な変数はGPVAL_DATA_Y_MIN
およびGPVAL_DATA_Y_MAX
です。これらは、特定の範囲にプロットされたデータのy-min/maxです。 GPVAL_Y_MIN
とGPVAL_Y_MAX
は、プロット境界線の端がどこにあるかを示すため、一般的に少し有用性が低くなります(一般に、これらの値は、gnuplotがデータとプロットのEdgeの間に少しスペースを残すため、GPVAL_DATA...
変数を少し超えます)。
これらの変数を利用するには、plotコマンドに範囲指定子を使用する必要があります。
plot [1:3] 'data.txt'
set yr [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
replot
...
ちなみに、最初の2列をxとyとしてプロットすることがgnuplotのデフォルトであるため、プロットする列を思い出したくない限り、u 1:2
の指定は冗長です。同じ出力ターミナルに再プロットしたくない場合(再プロットが同じプロットで2ページ目を作成するepsのような一部のターミナルでは役に立たない)、次のコマンドシーケンスを使用します。
set terminal unknown
plot [1:3] 'data.txt'
set terminal <actual output terminal here>
set output 'output.trm'
plot [1:3][GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX] 'data.txt'
範囲指定子の使用に注意してください。今回はy範囲が指定されています。これはset yrange
で指定するよりも少しコンパクトですが、コードの行が長くなります。
Gnuplot 4.6.0以降を使用している場合、stats
コマンドを利用して再プロットを回避できます。 stats
コマンドは、便利な変数の束を作成します
stats [1:3] 'data.txt'
plot [1:3][stats_min_y:stats_max_y] 'data.txt'
少し異なるコマンド、
stats [1:3] 'data.txt'
plot [stats_min_x:stats_max_x][stats_min_y:stats_max_y] 'data.txt'
実際のデータがある場所に基づいて、x方向にプロットを塗りつぶします。たとえば、{(1.1、3)、(2、4)、(2.9,5)}にデータポイントがある場合、x範囲は[1.1:2.9]に設定されます。
YrangeをGPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAXに設定すると、gnuplotsの自動スケーリング機能を使用しないため、範囲が次のティックに拡張されるという欠点があります。
したがって、自動プロットでは、以下を好む
f(x)=sin(x)>0.5? 1:-1 #example function
set ytics 0.2
plot 1.01*f(x) # dummy plot to set GPVAL_*
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]
plot f(x) # actual plot
もちろん、これはデータプロットでも機能します。
plot 'data.csv' u 1:(1.01*$2)
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]
plot 'data.csv' u 1:2