我正在绘制一些具有不同X范围的数据,我想根据当前X范围内数据的最大值和最小值来更改yrange.当我使用GPVAL_Y_MAX和GPVAL_Y_MIN时,这些值对应于整个数据的最大值和最小值,而不仅仅是范围中的数据.
例如,我有以下数据:
1 3
2 5
3 8
4 20
5 30
Run Code Online (Sandbox Code Playgroud)
我使用以下脚本:
plot 'data.txt' u 1:2;
set xrange [1:3];
replot
set xrange [1:5];
replot
Run Code Online (Sandbox Code Playgroud)
在第一个情节中,我想在[3:8]中设置yrange,但在第二个情节中,yrange sholud是[3:30].如果我使用类似的东西
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]
Run Code Online (Sandbox Code Playgroud)
GPVAL_Y_MIN和GPVAL_Y_MAX具有与xrange无关的相同值.
有解决方案吗
and*_*ras 16
您想要的变量是GPVAL_DATA_Y_MIN
和GPVAL_DATA_Y_MAX
,它是在特定范围内绘制的数据的y-min/max. GPVAL_Y_MIN
并且GPVAL_Y_MAX
有点不太有用,因为通常他们会告诉你哪里的情节边框的边缘(通常这些数值扩大一点点超越GPVAL_DATA...
,因为gnuplot的离开数据和剧情的边缘之间的小的空间变量).
要利用这些变量,必须使用plot命令的范围说明符:
plot [1:3] 'data.txt'
set yr [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
replot
...
Run Code Online (Sandbox Code Playgroud)
顺便说一下,u 1:2
除非你想提醒自己要绘制哪些列,否则规范是多余的,因为将前两列绘制为x和y是gnuplot默认值.如果您不想重新映射到相同的输出终端(这在某些终端(例如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'
Run Code Online (Sandbox Code Playgroud)
请注意再次使用范围说明符,这次指定了yy范围.这比使用指定更紧凑set yrange
,但需要更长的代码行.
如果您有gnuplot 4.6.0或更高版本,则可以利用该stats
命令来避免重新绘制.该stats
命令创建了一堆方便的变量
stats [1:3] 'data.txt'
plot [1:3][stats_min_y:stats_max_y] 'data.txt'
Run Code Online (Sandbox Code Playgroud)
命令略有不同,
stats [1:3] 'data.txt'
plot [stats_min_x:stats_max_x][stats_min_y:stats_max_y] 'data.txt'
Run Code Online (Sandbox Code Playgroud)
将根据实际数据所在的位置在x方向填充图表.例如,如果数据点位于{(1.1,3),(2,4),(2.9,5)},则x范围将设置为[1.1:2.9].