使用gnuplot获得平滑曲线

3

我希望您能在 gnuplot 上获得平滑的曲线。

这是我的代码:

set style line 3 lc rgb '#09ad00' lt 1 lw 1.5 #green
set style line 1 lc rgb '#0060ad' lt 1 lw 2  #blue 
set style line 2 lc rgb '#dd181f' lt 1 lw 2  #red
plot [-1:1] f1(x) with line ls 3,f2(x) with line ls 1,f1(x)+f2(x) with line ls 2

我正在获取这个图表

zig-zag curve no smooth curve

当我期望这种类型的曲线时

smooth curve no zig-zag curve


添加一行代码 set samples 200 - Michael
1个回答

3
你并没有说明你的特定函数是什么,但这几乎肯定是一个抽样问题。Gnuplot实际上不会为函数绘制曲线 - 它实际上在多个点计算函数,并使用直线将它们连接起来,类似于绘制数据文件的情况。其计算的点数是可由用户设置的。
假设我执行plot sin(x) 并看到如下结果: Jagged sine curve 这里采样率设置得相当低。我们可以查看各个点以了解发生了什么。

Jagged sine curve with points

为了改善这个问题,我需要使用“set samples?”命令增加采样率。默认值为100(在5.0补丁级别6中)。根据函数变化的速度,可能需要更高的值。我通常使用“set samples 1000”将其设置为约1000。这将更改图形为:

Smooth sine curve

这会产生一个更加平滑的曲线。再次说明,这只是一堆由直线连接的点,但当这些点很多时,它看起来像是一个平滑连续的曲线。

我们可以再次查看各个点(使用100的采样率,因为1000个点太多了,无法清晰地看到这些点)。

Smooth sine curve with points

我们也可以看到,1000个点和100个点的图形之间没有太大的区别。对于正弦曲线来说,100个点足以看到平滑的图形,但对于变化更快的曲线,我们可能需要更多的点。
“set samples”命令需要(可选)两个值,但第二个值仅用于3D图。您可以使用“help samples”命令了解更多信息。

1
Gnuplot默认的(相对较低)采样数可能与程序的年龄有关(读取SLOW计算机)。我建议在$HOME/.gnuplot中放置一个set samples 1001命令,同时根据经验法则,采样数应该大约为“最大值数量的30倍”。非常好的答案。 - gboffi
@gboffi 我还没有查看历史值以确定默认值是否与早期版本不同,但是,你几乎可以肯定地说它为什么如此之低。 - Matthew

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