gnuplot:范围内的最大值和最小值

时间:2012-11-27 08:39:11

标签: gnuplot

我正在绘制一些具有不同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

在第一个情节中,我想在[3:8]中设置yrange,但在第二个情节中,yrange sholud是[3:30]。如果我使用像

这样的东西
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]

GPVAL_Y_MIN和GPVAL_Y_MAX具有与xrange无关的相同值。

任何解决方案?

3 个答案:

答案 0 :(得分:15)

您想要的变量是GPVAL_DATA_Y_MINGPVAL_DATA_Y_MAX,它们是在特定范围内绘制的数据的最小值/最大值。 GPVAL_Y_MINGPVAL_Y_MAX一般不太有用,因为它们会告诉您边框边缘的位置(通常这些值会稍微超出GPVAL_DATA...个变量,因为gnuplot会留下一些数据和图表边缘之间的空间。)

要利用这些变量,您必须使用plot命令的范围说明符:

plot [1:3] 'data.txt'
set yr [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
replot
...

顺便说一句,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'

请注意再次使用范围说明符,这次指定了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]。

答案 1 :(得分:4)

将yrange设置为GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX的缺点是不使用gnuplots自动缩放功能,它将范围扩展到下一个tic。

在自动绘图中,我更喜欢以下

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

答案 2 :(得分:0)

我像这样使用它来定义函数的x范围

plot [0:5] sin(10*x) + cos(3*x)

此外,您可以在绘制之前设置范围

set xrange [0:5]
plot sin(10*x) + cos(3*x)

enter image description here