为什么gnuplot时间数据图中常规x轴和x2轴之间存在差异?

时间:2018-02-12 15:38:47

标签: plot gnuplot

所以我注意到了一些我无法解释的事情。如果我在gnuplot中的x轴和x2轴都有时间值,则相同的数据点不会排成一行。让我详细说明一个最小的工作示例。

我有两个数据文件:

一个包含实际数据:

# time1.dat - Some data:
1516205221  1
1516295221  2   "lbl1"
1516626421  3   "lbl2"
1518193566  4   "lbl3"
1518433621  5   "lbl4"
1518539166  6
1518599166  7

其中一个带有某些数据点的标签:

# Some labels
1516295221  "label1"
1516626421  "label2"
1518193566  "label3"
1518433621  "label4"

每个文件中的第一列是以unix epoch格式表示的时间(自1970年1月1日起00:00:00开始的a.k.a.秒)。注意一些行如何在两个文件中具有相同的纪元,例如这条线

1516295221  2   "lbl1"
time1.dat中的

"label 1"中标有time2.dat的行具有相同的纪元。

现在如果我跑

reset
set xdata time
set x2data time
set timefmt "%s" # epoch
set x2tics

set tics nomirror front; set yrange [0:]

plot \
    'time1.dat' using ($1):($2):($3) with labels offset 0, char 1 notitle, \
    'time1.dat' using ($1):($2) with points notitle, \
    'time2.dat' using ($1):(NaN):x2tic(2) notitle

我在下面的图片中看到了不匹配。数据点" lbl1"应该与xtic" label1" (同样适用于" label2")。但他们没有。为什么这样,我该如何解决这个问题?

mismatch between two gnuplot time axis

我不确定这是一个错误或预期的行为,我只是错过了一个设置。

2 个答案:

答案 0 :(得分:3)

xx2轴完全不相关。他们有自己的范围,规模和方向。使用set link强制这些轴之间的固定关系。

在您的情况下,只需使用set link x2即可x2等同于x

reset
set xdata time
set x2data time
set timefmt "%s" # epoch
set x2tics

set tics nomirror front; set yrange [0:]
set link x2
plot \
    'time1.dat' using ($1):($2):($3) with labels offset 0, char 1 notitle, \
    'time1.dat' using ($1):($2) with points notitle, \
    'time2.dat' using ($1):(NaN):x2tic(2) notitle

enter image description here

答案 1 :(得分:1)

似乎:

set autoscale xfix
set autoscale x2fix

对于xx2轴都是必需的。

不确定原因,但这是一个修复。但是,它具有自动缩放带来的所有其他问题。我仍然愿意采用一种解决方案来保留已经存在的范围和扩展。