Gnuplot:在平滑曲线之间填充曲线

时间:2012-03-12 09:01:15

标签: gnuplot

我有两组要点:“test1.dat”和“test2.dat”,它们不共享相同的X值。

我想首先绘制两条平滑线,因为数据很吵,而且 然后在平滑线之间绘制一条填充曲线。

我已经阅读了教程,但找不到答案。

3 个答案:

答案 0 :(得分:1)

据我所知,Gnuplot无法使用2个不同文件中的数据进行绘图。在这种情况下,我调用BASH程序,如“粘贴”来合并这两个文件。我假设这两个文件包含格式为“X Y”的数据,它们共享一个共同的X网格(数据点的数量也必须相等)

plot '<paste test1.dat test2.dat' u 1:2:4 w filledcurve

PS:如果你不使用Linux,我就不知道该怎么做....

答案 1 :(得分:1)

拉斐尔罗斯回答并查看了gnuplot文档后,你可以通过一些shell魔术来实现这一点,对于不共享X值的数据集也是如此。

plot '< tail -r test2.dat | cat test1.dat -' using 1:2 with filledcurves closed

我在测试时注意到的一件事是你应该确保在test2.dat结尾处有换行符,否则tail -r将无法正常工作(tac可能也工作,但它没有安装在我的Mac上。这可以使用第一个数据文件并将第二个数据文件反向附加到第一个数据文件。(我假设第一个和第二个数据文件已经使用升序X值排序)。换句话说,就gnuplot而言,数据在x中上升然后在x中下降。因为我们使用with filledcurves closed gnuplot将所有点视为单个多边形然后连接它们。就平滑数据而言,完全是另一个问题。只是看一下文档,gnuplot提供了一些平滑算法,但是它们需要提前用于你的数据。以下是完全未经测试的,但希望类似于你想要的东西(它也可能只适用于unix类型的环境)...

set table 'smoothed1'
plot 'test1.dat' using 1:2 smooth beizer  #beizer is just an example see "help plot datafile smooth" for more options
unset table

set table 'smoothed2'
plot 'test2.dat' using 1:2 smooth beizer
unset table

plot '< tail -r smoothed2 | cat smoothed1 -' using 1:2 with filledcurves closed

如果它不起作用,请查看gnuplot生成的文件“smoothed1”和“smoothed2”,看看是否有任何提示(例如是否有额外的新行应删除?)

答案 2 :(得分:0)

这对我有用。首先在上平滑线和x轴之间填充一些颜色,在下面的线和x轴之间填充第二个白色,最后绘制两条平滑的线。

  

光滑的cspline必须在fillcurve之前

{{1}}