合并多个数据文件以在单个图形中绘图

时间:2011-08-28 00:14:33

标签: gnuplot

扩展我之前提出的问题,可在此处找到plotting multiple (x,y) co-ordinates in a single curve with gnuplot。我试图使用2个不同的文件绘制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

现在,如何合并这两个文件以绘制单个图形。这两个文件没有相同的行数,但我想这没关系。第一条曲线将在第一个文件的(x1,y1)和(x2,y2)之间,它将一直持续到(x10,y10)。在(x1,y1)和(x2,y2)之间的曲线中;来自第二个文件的点(x1,y1),(x2,y2)和(x3,y3)。

我按照这个链接http://t16web.lanl.gov/Kawano/gnuplot/datafile3-e.html对两个文件进行排序和连接,但得到了一些奇怪的行,这是完全错误的。这些值实际上应该绘制贝塞尔曲线,但不能得到图形。我编写了以下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, \    

我收到以下错误:

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!

1 个答案:

答案 0 :(得分:4)

以下脚本适用于我的机器。也许这甚至是你正在寻找的......

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