限制Gnuplot绘制的函数的定义域

15

我正在 Gnuplot 上绘制一组数据,并希望将函数x^2叠加在同一张图上。我可以这样做:

plot "filename" using 1:2, x**2

这将产生一个在整个图形域中延伸的函数 x^2 的图。我希望它只显示在图的一小部分上,比如从x=1到x=2,而图的大小由filename决定,从x=0到x=10。我知道,要单独绘制函数,可以这样做:

plot [1:2] x**2

但是,如果我的直觉尝试不起作用,我该如何保持重叠的状态呢:

plot "filename" using 1:2, [1:2] x**2

invalid expression

在实现此功能时,文档似乎很难解释。

2个回答

21

最简单的方法可能是使用三元运算符?定义分段函数:

f(x) = (x > 1 && x < 2) ? x**2 : 1/0
plot "filename" using 1:2, f(x)

另一种方式是使用 replot 命令:

plot "filename" using 1:2
replot [1:2] x**2

但是这个分段函数在图中显示了不连续性!你知道如何去除它吗?感谢你发布的答案。 - user3261475
我不确定您所说的图中间断是什么意思。当我绘制f(x)时,我得到了从1到2的x²,就像您要求的那样。您能否请澄清一下问题? - andyras
@andyas 谢谢您的快速回复!我的意思是从0跳到下一个值,因为这个函数不是分段连续的。祝好! - user3261475
你是指从1跳到第一个绘制的点(略高于1)吗?那是因为函数f(x)仅在离散点上采样。这些点的数量由set sample命令确定--这可能有所帮助。 - andyras
非常感谢您的帮助 :) 干杯 - user3261475

7

我知道这是一个老问题,但对于任何可能正在寻找更简单方法的人:

您的第一个想法

plot "filename" using 1:2, [1:2] x**2

现在可以使用。


在5.2版本中,[1:2] x**2仅设置绘图的初始缩放比例,而不限制定义域。在后续版本中是否有所不同? - Tom Anderson
@TomAnderson 你具体是什么意思?我在5.2和5.4中得到了期望的结果。但是,如果你执行 plot [1:2] x**2, "filename" using 1:2, 文件的数据也将被限制为 [1:2]。而如果你执行 plot [1:2] x**2, [0:10] "filename" using 1:2, 数据文件的范围将 不会 扩展到 [0:10]。这并不直观,但我想它在“幕后”有一些原因。 - theozh
@theozh 再试一次(仍然使用5.2),我无法完全重现您所说的内容。这里是一个带有数据和绘图命令的完整示例。如果我执行 plot "file.dat" using 1:2 with lines, [1:3] sin(x),那么函数的定义域确实受到限制。但是,如果我执行 plot [1:3] sin(x), "file.dat" using 1:2 with lines,那么函数会趋于无穷大,并且文件中的所有数据都会被绘制;只有初始缩放比例发生了变化。 - Tom Anderson
@TomAnderson,“function goes to infinity”是什么意思?在您的情况下,3和4,我的图形被限制在[1:3]范围内。您使用的是5.2.0还是5.2.8版本? - theozh

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