将值与时间戳对齐到时间轴

时间:2017-05-31 08:57:31

标签: gnuplot

我希望可视化在时间轴上从多个来源的特定时间戳给出的数据。例如,输入文件时,第1列是时间戳,第2列是数据:

O1.dat:

100 5
300 10

O2.dat:

200 7
400 3

同时以一定的间隔对所有值的平均值进行采样:

Avg.dat:

250 6.5
500 6.25

我想以类似于表格的方式绘制所有值,因此它看起来像这样,其值与顶部的时间对齐:

enter image description here

我的真实数据达到了高达10000的时间戳,所以动态的东西会很好。

到目前为止,我只绘制了简单的盒子或线条图,所以我不知道如何去做这个。

感谢您的时间。

编辑:

到目前为止,这是对接受的答案进行调整后的情况:

enter image description here

仍有一些重叠,但这仅仅是因为数据彼此太接近了。用于此目的的脚本:

#set term pdf
#set term pdf size 8, 5
#set output 'out.pdf'
set term png
set term png size 1200, 700
set output 'out.png'

set termoption font ",20"
set label 'Time (ms)' at graph 0, graph 1 offset -0.75, char 1 right
unset border
unset key
unset xtics
set ytics scale 0
set x2tics () scale 0
set yrange [0:5.5]
set x2range[0:10000]
set lmargin 9

set arrow from graph -0.15, graph 1 to graph 1.1, graph 1 nohead
set arrow from graph -0.01, graph 1.2 to graph -0.01, graph -0.2 nohead
set arrow from graph -0.15, first 0.3 to graph 1.1, first 0.3 nohead

set style data labels
plot for [i=0:9] 'desc'.i.'.txt' using 1:(5-0.5*i):(sprintf('%d', $2)):ytic('Object '.i) axes x2y1, \
     'Avg.dat' using 1:(0):(sprintf('%d', $2)):ytic('Avg') axes x2y1

1 个答案:

答案 0 :(得分:2)

传统的,简单的部分是绘制实际数据。为此,您可以使用labels绘图样式。一个非常简单的例子是:

set xtics (0)
set xrange [0:*]
set offsets graph 0, graph 0.2, graph 0.2, graph 0.2
set style data labels
unset key
plot 'O1.dat' using 1:(5):(gprintf('%g', $2)):ytic('O1'),\
     'O2.dat' using 1:(4):(gprintf('%g', $2)):ytic('O2'),\
     'Avg.dat' using 1:(3):(gprintf('%g', $2)):ytic('Avg'):xtic(1)

这只是将数据文件中的值绘制为第一列中给出的x位置的标签。 y位置设置为固定数字:

enter image description here

为了将xtick标签移到顶部并有一些类似于桌子的线,你需要更多调整:

reset

set termoption font ",20"
set label 'Object' at graph 0, graph 1 offset -1, char 1 right
unset border
unset key
unset xtics
set ytics scale 0
set x2tics () scale 0 format "%g"
set yrange [2:5.5]
set x2range[0:*]
set lmargin 8

set arrow from graph -0.15, graph 1 to graph 1.1, graph 1 nohead
set arrow from graph 0, graph 1.2 to graph 0, graph 0 nohead
set arrow from graph -0.15, first 3.25 to graph 1.1, first 3.25 nohead

set style data labels
plot 'O1.dat' using 1:(5):(sprintf('%d', $2)):ytic('O1') axes x2y1,\
     'O2.dat' using 1:(4):(sprintf('%d', $2)):ytic('O2') axes x2y1,\
     'Avg.dat' using 1:(2.5):(gprintf('%g', $2)):ytic('Avg'):x2tic(1) axes x2y1

这样的表格布局不是典型的任务,因此您必须根据最终结果调整几个设置。主要影响来自画布大小,字体和字体大小。

enter image description here

如果你有两个以上的文件,你当然也可以迭代一个文件列表。