这里提出了类似的问题。基本上,我有三列(A、B、C),它们代表测量值 A(B) 和 C(B)。比如说,B 是时间,A 是温度,C 是取决于 A 的任何其他物理量。
我想绘制x1
温度、
x2
时间和 y1
C
随着时间的变化。上述解决方案适用于几个数据点,但不适用于较大的数据集,因为它本质上修改了标签,并且我失去了对标签的控制。我希望情节看起来像:温度在
x1
轴上,形式如下:显然它们最初不会等距,因为温度和时间之间的关系是: 知道如何解决这个问题吗?测试数据在这里
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
结果:
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
时间信号和时间-温度: