Gnuplot 合并多个数据文件以在单个图形中打印

Gnuplot 合并多个数据文件以在单个图形中打印,gnuplot,Gnuplot,扩展我先前提出的问题,可以在这里找到。我试图用两个不同的文件在gnuplot中绘制贝塞尔曲线。第一个文件中的每个(x,y)形成一条贝塞尔曲线,该曲线通过第二个文件中的点。第一个文件的坐标如下所示: x y 0.0 0.5 0.12 0.1 0.16 0.4 0.2 0.35 0.31 0.8 0.34 0.6 0.38 1.0 0.46 0.2 0.51 0.7 0.69

扩展我先前提出的问题,可以在这里找到。我试图用两个不同的文件在gnuplot中绘制贝塞尔曲线。第一个文件中的每个(x,y)形成一条贝塞尔曲线,该曲线通过第二个文件中的点。第一个文件的坐标如下所示:

 x      y  
0.0    0.5     
0.12   0.1    
0.16   0.4    
0.2    0.35   
0.31   0.8    
0.34   0.6   
0.38   1.0    
0.46   0.2   
0.51   0.7    
0.69   0.9    
 x      y
0.00   0.7
0.04   0.74073082208
0.08   0.85926917792 
0.12   0.9 
0.16   0.9
0.2    0.9  
0.24   0.749720623086
0.28   0.874229601255
0.32   0.74073082208
0.36   0.8 
0.4    0.721178508605 
0.44   0.878821491395
0.48   0.761772990545
0.52   0.700774803388
0.56   0.723771273415
0.6    0.789508073675
0.64   0.864014272269
0.68   0.896743348931
第二个文件的坐标如下所示:

 x      y  
0.0    0.5     
0.12   0.1    
0.16   0.4    
0.2    0.35   
0.31   0.8    
0.34   0.6   
0.38   1.0    
0.46   0.2   
0.51   0.7    
0.69   0.9    
 x      y
0.00   0.7
0.04   0.74073082208
0.08   0.85926917792 
0.12   0.9 
0.16   0.9
0.2    0.9  
0.24   0.749720623086
0.28   0.874229601255
0.32   0.74073082208
0.36   0.8 
0.4    0.721178508605 
0.44   0.878821491395
0.48   0.761772990545
0.52   0.700774803388
0.56   0.723771273415
0.6    0.789508073675
0.64   0.864014272269
0.68   0.896743348931
现在,如何合并这两个文件以绘制单个图形。这两个文件的行数不一样,但我想这并不重要。从第一个文件开始,第一条曲线将在(x1,y1)和(x2,y2)之间,该曲线将持续到(x10,y10)。在(x1,y1)和(x2,y2)之间的曲线中;来自第二个文件的点(x1,y1)、(x2,y2)和(x3,y3)位于

我按照这个链接对两个文件进行排序和连接,但得到了一些奇怪的行,这是完全错误的。这些值实际上应该绘制Bezier曲线,但不能绘制图形。我编写了以下gnuplot脚本来绘制连接的数据:

set term x11 persist
set title "Animation curves"
set xlabel "Time (secs.)"
set ylabel "Parameter"
set x2label "Phoneme1" offset -35
set pointsize 2
set key off
set style line 2 lt 0 lc 1 lw 2
set xrange [0.0:1.0]
set yrange [0.0:1.3]

plot [0.0:0.8] "< cat -n file1.dat" u 1:2 smooth csplines ls 1, "" u 1:(0.0):(0):(1.3) w vectors nohead ls 2, "" u ($1+0.005):(1):(sprintf("P %d", $0)) w labels, \
           "file1.dat" u 1:2 with points, \
           "file2.dat" u 1:2 with points, \    
set term x11持久化
设置标题“动画曲线”
设置xlabel“时间(秒)”
设置标签“参数”
设置X2标签“Phoneme1”偏移量-35
设置点大小2
点火
设置样式行2 lt 0 lc 1 lw 2
设置xrange[0.0:1.0]
设置Y范围[0.0:1.3]
plot[0.0:0.8]“
我得到了以下错误:

plot "< cat -n file1.dat" u 1:2 smooth csplines ls 1, "" u 1:(0.0):(0):(1.3) w vectors    nohead ls 2, "" u ($1+0.005):(1):(sprintf("P %d", $0)) w labels, "file1.dat" u 1:2 with points, "file2.dat" u 1:2 with points,                  
                          ^
"plot.gp", line 21: Cannot smooth: no data within fixed xrange!
plot“
下面的脚本在我的机器上运行。也许这就是你想要的

set term x11 persist
set title "Animation curves"
set xlabel "Time (secs.)"
set ylabel "Parameter"
set x2label "Phoneme1" offset -35
set pointsize 2
set key off
set style line 2 lt 0 lc 1 lw 2
set xrange [0.0:1.0]
set yrange [0.0:1.3]

plot [0.0:0.8] "< cat file1.dat file2.dat | sort -n" u 1:2 smooth csplines ls 1, \
                         "" u 1:(0):(0):2 w vectors nohead ls 2, \
                         "" u ($1 + 0.005):(1):(sprintf("P %d", $0)) w labels, \
                         "file1.dat" u 1:2 w p, \
                         "file2.dat" u 1:2 w p 
set term x11持久化
设置标题“动画曲线”
设置xlabel“时间(秒)”
设置标签“参数”
设置X2标签“Phoneme1”偏移量-35
设置点大小2
点火
设置样式行2 lt 0 lc 1 lw 2
设置xrange[0.0:1.0]
设置Y范围[0.0:1.3]
绘图[0.0:0.8]“
检查我是否理解您的问题:如果将两个文件放在一个文件中,只需绘制数据即可。棘手的部分是如何在不合并这些文件的情况下使用gnuplot实现这一点。这是正确的还是“更多的”呢?@Woltan谢谢你看我的问题。最后我得到了答复。是的,完全正确。我觉得自己很愚蠢,不能这样想。如果它们可以合并到一个文件中,那么gnuplot就可以简单地绘制它,而不会有任何麻烦。问题是,我在python代码中生成这些文件。因此,如果python中有一种方法可以合并两个文件并在连接的文件中对它们进行排序,那么就可以了。但据我所知,我已经试过了,但会再试一次。我现在想起来了,我已经尝试过排序和连接了,但是没有得到正确的结果。我应该从数据中得到bezier曲线,但得到了一些随机线,这是错误的。如果在上有多个条目,例如
x=0.12
,则可能会出现问题。既然用python导出了它,为什么不简单地更改导出例程并编写一个没有多个条目的文件呢?你也可以利用我当时的想法,试图做一个错误的解决方案。虽然现在没有语法错误。但它的策划方式并不正确。它应该只绘制file1.dat中点之间的曲线。来自file2.dat的数据是位于file1.dat曲线之间的点。我只是感到困惑,认为这个解决方案是错误的,但事实上图形是绝对正确的。错误的是,向量的标记和绘制。这两个文件中的数据都会发生这种情况。但实际上,这只适用于file1.dat。这可能吗?