Gnuplot自动缩放的最小和最大边界

14

我如何限制gnuplot的自动缩放功能,以便例如y-max至少为某个值,并且它可以自动缩放到固定的"限制"?

从文档中看来,我只能看到如何固定轴的最小或最大端点,而另一个端点则自动缩放。

有关PDF页面93上自动缩放的信息


你能澄清一下“自动缩放”是什么意思吗?你想将ymax设置为某个值,还是想缩放数据,使其最大值达到某个值? - andyras
@andyras ymax的示例:ymax的最小值可以是100,最大值可以是1000。如果最高数据点为50,则ymax将为100。它会自动缩放到1000以下的值。之后的值将被削减。 - varesa
4个回答

20

自版本4.6起,gnuplot提供了一种新的语法来指定自动缩放的上限和下限。对于您的情况,您可以使用以下语法:

set xrange [0:100 < * < 1000]

引用自文档:

自动缩放的范围可以由下限<lb>、上限<ub>或两者限制。 语法为

{ <lb> < } * { < <ub> }

例如

0 < * < 200

设置<lb> = 0<ub> = 200

该语法可应用于set *range的最小值或最大值。

要自动调整xmin但保持为正数,使用:

set xrange [0<*:]

要自动调整 x 的比例,但保持最小范围在 10 到 50:

set xrange [*<10:50<*]

请查看有关 set xrange 的文档获取更多信息。


5

我认为这是不可能的,要么你在一个或多个轴上启用了自动缩放,包括无、最小或最大值:

set yrange [FIXED_MIN : FIXED_MAX]
set yrange [        * : FIXED_MAX]
set yrange [FIXED_MIN :         *]
set yrange [        * :          ]

分别。

看起来确实是这样,而不是我找不到它。看来我必须使用数据手动缩放。 - varesa

4
在这种情况下,你可以对数据进行过滤,让gnuplot按照其正常的自动缩放方式进行操作。
set yrange [*:*]
plot 'mydatafile' u 1:(($2 >= YMIN && $2 <= YMAX) ? $2 : 1/0)

那基本上就是我所做的(但不是在gnuplot之外)。如果我误读了代码,那么这将排除所有低于YMIN的值?你可能稍微误解了我的意思(例如,Ymin=0,Ymax=100-1000)。我通过添加一个具有背景颜色(因此不可见)的单个数据点来解决此问题,其位置位于YMIN。这给了我想要的效果。 - varesa
1
@varesa -- 如果你使用的是 gnuplot 4.6,还有 stats 命令,可以将它与上面的过滤器和 gnuplot 定义的变量“GPVAL_YMIN”和“GPVAL_XMIN”配对使用,但现在我们开始变得更加复杂了。 "不可见" 的点是一个有趣的想法,我喜欢它。 - mgilson
Gnuplot 4.6甚至添加了一种新的语法来自动缩放上下限,例如set xrange [0:100 < * < 1000] - Christoph

1
由于人们似乎对这个问题很感兴趣,我将我的解决方法作为答案添加:

我通过在数据开头插入一个不可见的标记来设置自动缩放的最小值。这会导致图形始终“显示”它,即使它看不到。

然后我在 gnuplot 之外(也可能在其中)实现了最大值,在一个解析器脚本中,我用它来准备 gnuplot 的数据。

实际上,在脚本中,我取出所有被“裁剪”的值,将它们加到 y=0 上,并将它们变成红色。这样我就得到了一个“警告”,告诉我某些值太大,无法用图表表示。(我的程序监视两个主机之间的 ping,试图绘制超过 5 秒的延迟是没有意义的 => 我将其标记为连接断开)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接