通过gnuplot随着时间的推移堆积直方图

时间:2014-05-20 00:13:30

标签: gnuplot

我想绘制一个堆积的直方图。结果与Using gnuplot for stacked histograms不同。

以下是数据:

05/11/2014 10:00:00 1   5   1   
05/12/2014 22:00:00 3   5   1
05/13/2014 13:00:00 4   4   1
05/14/2014 09:00:00 3   4   1
05/15/2014 04:00:00 1   2   1

前两列用空格分隔,其余列用制表符分隔。 x轴应该是日期和时间。

以下gnuplot脚本存在问题:

set title "Test"
set key invert reverse Left outside
set key autotitle columnheader
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
set datafile separator '\t'
set xdata time
set timefmt '%M/%D/%Y %H:%M:%S'
set format x '%M/%D %H'
plot 'test.dat' using 2:xtic(1) title 'Col1',  '' using 3 title 'Col2', '' using 4 title 'Col3'

上述脚本将导致错误:需要完全使用x时间数据的规范。但是,如果取消设置xdata,它就可以工作。

2 个答案:

答案 0 :(得分:3)

set xdata time部分确实是错误的。

直方图与其他绘图样式略有不同:这些框放置在整数x值012等处,并获得自定义标签,在您的case是第一列中包含的时间信息。所以x轴不是实时轴。

以下脚本适用于4.6.4:

set title "Test"
set key invert reverse Left outside
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
set datafile separator '\t'

plot 'test.dat' using 2:xtic(1) title 'Col1',  '' using 3 title 'Col2', '' using 4 title 'Col3'

enter image description here

如果要更改标签使用的时间格式,则必须手动解析时间字符串。 xtic(1)相当于xtic(strcol(1))。您可以使用strcol(1)strptime处理此数据,而不是使用包含第一列中信息的strftime作为字符串,以便更改显示的时间信息:

set title "Test"
set key invert reverse Left outside
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
set datafile separator '\t'

plot 'test.dat' using 2:xtic(strftime('%m/%d %Hh', strptime('%m/%d/%Y %H:%M:%S', strcol(1)))) title 'Col1',\
     '' using 3 title 'Col2', '' using 4 title 'Col3'

enter image description here

答案 1 :(得分:1)

如何简单地使用双引号内的日期和时间值。所以你的数据文件是:

"05/11/2014 10:00:00" 1   5   1   
"05/12/2014 22:00:00" 3   5   1
"05/13/2014 13:00:00" 4   4   1
"05/14/2014 09:00:00" 3   4   1
"05/15/2014 04:00:00" 1   2   1

您的绘图脚本将是:

set title "Test"
set key invert reverse Left outside
#set key autotitle columnheader
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
set xtics border in scale 0,0 nomirror rotate by 90  offset character 0, -9, 0
plot 'test.dat' using 2:xtic(1) title 'Col1',  '' using 3 title 'Col2', '' using 4 title 'Col3'

结果情节将是:

enter image description here