我有两个同时的两个数据文件
date1data.csv
2018.02.03.18:23,4
2018.02.03.19:23,22
2018.02.03.20:23,12
2018.02.03.21:23,3
2018.02.03.22:23,16
date2data.csv
2018.02.04.18:23,1
2018.02.04.19:23,5
2018.02.04.20:23,22
2018.02.04.21:23,5
2018.02.04.22:23,14
如果我绘制它们,我会得到这个图,其中数据是在一天之后绘制的。
我如何仅根据时间而不是日期绘制它们以便它们同时叠加?这可能吗?我不想在多个窗口中绘制它们。
这就是我用于绘图的代码:
set datafile separator ","
set terminal pngcairo size 500,200 enhanced font 'Verdana,10' linewidth 1
set output 'test.png'
set xdata time
set timefmt "%Y.%m.%d.%H:%M"
set format x "%H:%M"
plot 'date1data.csv' using 1:2 w lines lw 2 t "day1", 'date2data.csv' using 1:2 w lines lw 2 t "day2"
答案 0 :(得分:2)
您可以使用删除第1列时间字符串的日期部分的函数替换using 1:2
:
set timefmt "%H:%M"
f(v) = substr(stringcolumn(v),12,16)
plot 'date1data.csv' using (f(1)):2 w lines lw 2 t "day1",\
'date2data.csv' using (f(1)):2 w lines lw 2 t "day2"
答案 1 :(得分:0)
这是一个解决方案,它使用stats
命令查找两个数据文件中的最早时间,并移动第二个文件的时间,以便与第一个文件中的最早时间保持一致。我们必须解决stats
命令的限制,因为它在timedata模式下不起作用,但我们可以通过自己进行时间到秒的转换来解决这个问题:
set datafile separator ","
fmt = "%Y.%m.%d.%H:%M"
stats "date1data.csv" u (strptime(fmt,strcol(1)))
t1min = STATS_min
stats "date2data.csv" u (strptime(fmt,strcol(1)))
t2min = STATS_min
set xdata time
set format x "%H:%M"
plot 'date1data.csv' using (strptime(fmt,strcol(1))):2 w lines lw 2 t "day1", \
'date2data.csv' using (strptime(fmt,strcol(1))-t2min+t1min):2 w lines lw 2 t "day2"
答案 2 :(得分:0)
您可以通过减去午夜来删除数据中的日期部分:
t(x) = x - 24*3600*(floor(x/(24*3600))
plot dataf1 us (t($1)):2, dataf2 us (t($1)):s
这实际上100%正确工作,因为unix时间忽略了闰秒,你的计算机时钟只是在一个发生时调整自己。