Gnuplot - 通过数据集链接 x1 和 x2 轴,而不是函数

问题描述 投票:0回答:2

这里提出了类似的问题。基本上,我有三列(A、B、C),它们代表测量值 A(B) 和 C(B)。比如说,B 是时间,A 是温度,C 是取决于 A 的任何其他物理量。

我想绘制

x1

 温度、
x2
 时间和 y1 
C
 随着时间的变化。上述解决方案适用于几个数据点,但不适用于较大的数据集,因为它本质上修改了标签,并且我失去了对标签的控制。我希望情节看起来像:
温度在 x1
 轴上,形式如下:
显然它们最初不会等距,因为温度和时间之间的关系是:

知道如何解决这个问题吗?测试数据在这里

https://pastebin.com/CqAHjBJe

gnuplot
2个回答
0
投票
据我了解您的问题,您想链接 x1 和 x2 轴,对吗?为此,您需要一个表达式及其反函数。检查

help link

我想说,这仅在温度随时间增加(线性?!)的范围内才有意义。从图中,我读取了这些值:

# Time t0 = 73 t1 = 287 # Temperature T0 = 179 T1 = 1252
我想,人们还可以考虑一种自动提取这些值的方法。

脚本:

### link x1 and x2 axes reset session FILE = "SO76860010.dat" # Time t0 = 73 t1 = 287 # Temperature T0 = 179 T1 = 1252 set datafile separator comma set xlabel "Time" set xrange[t0:t1] set xtics nomirror set x2label "Temperature" set link x2 via (x-t0)*real(T1-T0)/(t1-t0) + T0 inverse (x-T0)*real(t1-t0)/(T1-T0) + t0 set x2tics 100 set grid x2,y set ylabel "Quantity" set key noautotitle plot FILE u 2:3 w l lc "red" ### end of script

结果:


0
投票
如果我理解得好的话,你想要这样的东西:

reset; set grid; set xlabel 'Temperature' set ylabel 'signal' set x2label 'time' offset 0,-1 set xtics nomirror set x2tics rotate by 90 set xrange[0:1200] plot '013_d.dat' u 1:3:x2tic("".int($2)) every ::0::0 axes x1y1 w d lc 1 notitle,\ '' u 1:3:x2tic("".int($2)) every 25::50 axes x1y1 w d lc 1 notitle,\ '' u 1:3 w l lc 1 t 'Measurement'
解决方案的关键是通过以下方式将一些时间数据分配给 x2tics:

using 1:3:x2tics(2)

。然而,你的数据太多了,因此你必须减少
every

由于数据集的性质,时间数据在绘图开始时较密集,因此受

every

 影响的绘图被分为两部分。如果需要,您可以添加更多“子图”。

rotate by 90

int($2)
 用于更易读的图表。

如果您想查看代码的作用,请使用:

plot '013_d.dat' u 1:3:x2tic("".int($2)) every ::0::0 axes x1y1, '' u 1:3:x2tic("".int($2)) every 25::50 axes x1y1, '' u 1:3 w l


我已使用此(定制)数据作为

时间信号时间-温度

© www.soinside.com 2019 - 2024. All rights reserved.