gnuplot图2列的差异

时间:2012-05-22 08:42:44

标签: plot gnuplot

我有两个文件A和B.两个文件都包含2列,x和y。

现在,我想绘制x vs(yA - yB)的图表。 gnuplot是否提供相同的命令?

还有一件事,假设xA和xB不相同。我应该如何绘制图形,其中x轴包含两者中的所有元素,xA和xB以及y轴的差异是相应的y分量?

2 个答案:

答案 0 :(得分:6)

首先,在bash中使用join预处理文件:

join <(sort -k1,1 file1) <(sort -k1,1 file2) > file3

对文件进行排序至关重要,否则join将无效。

然后您可以使用结果绘制图形:

plot '< sort -n file3' using 1:($2-$3) with lines

同样,这里需要数字排序,因为join使用字母数字排序,这使得线条相互交叉。

答案 1 :(得分:2)

我认为这对paste来说可能是件好事。

plot "<paste A B" u 1:($2-$4) w points #whatever line style you want...
                  #xA #yA-yB

对于xA!= xB的文件,我有点不清楚你是否只想绘制两个共同点的集合(两个集合的交集)或者是否要绘制所有点(集合的联合)。联盟很简单:

plot "<paste A B" u 1:($2-$4) w points ls 1,\
     "<paste A B" u 3:($2-$4) w points ls 1

仅使用unix命令行工具很难解决问题(特别是如果你想保留输入的顺序)

虽然使用Python,但它并不太糟糕......

#joinfiles.py
import sys
f1=sys.argv[1]
f2=sys.argv[2]
xA,yA=zip(*[map(float,line.split()) for line in f1.readlines()])
xB,yB=zip(*[map(float,line.split()) for line in f2.readlines()])
f1.close()
f2.close()
for i,x in enumerate(xA):
    if(x in xB):
        sys.stdout.write('%f %f %f\n'%(x,yA[i],yB[i]))

然后从gnuplot:

plot "<python joinfiles.py A B" u 1:($2-$3) #...