从多天绘制相同的 TimePeriod

Plot same TimePeriod from Multiple Days

我的数据是这样的: File_A

2015-08-01 00:00    424.9563018750976
2015-08-01 00:01    785.7380434263472
....
2015-08-01 23:59

File_B

2015-08-02 00:01    1.4625096463725384
2015-08-02 00:02    6.0047607076482485
....
2015-08-02 23:59

所以日期格式是:%Y-%m-%d %H:%M 我想为整个月绘制一个系列,但每天只绘制时间段,例如09:00 - 15:00.

这是我尝试过的:

clear
reset
cd 'C:\Users\SammerP\Desktop\Desktop Calc\AIT ALL\CatchAllDataAIT\data'
set title 'Data of Month' font 'bold verdana,08'
set xdata time
set timefmt '%Y-%m-%d %H:%M'
set format x '%Y-%m-%d %H:%M'
set ylabel 'Value' 
set yrange [550:700]
set ytics (550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800)
set xtics rotate by 45 offset -1.5,-1.2
set xrange ['2014-08-01 09:00':'2014-08-31 15:00']

set xtics ('08-01' '2014-08-01 13:00','08-02' '2014-08-02 13:00','08-03' '2014-08-03 13:00','08-04' '2014-08-04 13:00','08-05' '2014-08-05 13:00',\
'08-06' '2014-08-06 13:00','08-07' '2014-08-07 13:00','08-08' '2014-08-08 13:00','08-09' '2014-08-09 13:00','08-10' '2014-08-10 13:00','08-11' '2014-08-11  13:00',\
'08-12' '2014-08-12 13:00','08-13' '2014-08-13 13:00','08-14' '2014-08-14 13:00','08-15' '2014-08-15 13:00','08-16' '2014-08-16 13:00',\
'08-17' '2014-08-17 13:00','08-18' '2014-08-18 13:00','08-19' '2014-08-19 13:00','08-20' '2014-08-20 13:00','08-21' '2014-08-21 13:00',\
'08-22' '2014-08-22 13:00','08-23' '2014-08-23 13:00','08-24' '2014-08-24 13:00','08-25' '2014-08-25 13:00','08-26' '2014-08-26 13:00',\
'08-27' '2014-08-27 13:00','08-28' '2014-08-28 13:00','08-29' '2014-08-29 13:00','08-30' '2014-08-30 13:00','08-31' '2014-08-31 13:00')
set grid
set nokey
plot'File_A.csv' using 1:2 axes x1y1 linewidth 1 lc rgb 'red' w l,\
'File_B' using 1:2 axes x1y1 linewidth 1 lc rgb 'red' w l,
..........

我通过仅绘制每个文件中的特定行来尝试它,但最终在几天之间出现了漏洞。 我认为问题可能出在 xrange 设置上,所以我删除了它,但问题是一样的

有没有办法设置 xrange 以便 Gnuplot 从第 1 天到第 31 天绘制图,从 09:00 到 15:00 的每一天,并且天与日之间没有空格。

下面是它现在的样子的一个例子:

这不能用 gnuplot 自动完成。在我看来,你最好的选择是不使用时间轴,而是使用普通的数字轴,并提供你自己的映射来正确标记 xtics 并根据需要调整日期之间的间隔。

这是一个可能的解决方案,但由于没有适当的测试数据,我无法验证我的所有步骤是否正确:

gapBetweenDaysInSeconds = 1000
startHour = 9.0
endHour = 15.0

set xtics ("01-08" (13-startHour)*60*60)
set for [i=2:31] xtics add (sprintf("08-%02d", i) ((i-1)*(endHour-startHour) + 13 - startHour)*60*60 + (i-1)*gapBetweenDaysInSeconds)

# for gnuplot 5.0
# gettime(col) = timecolumn(col, '%Y-%m-%d %H:%M')
# for all gnuplot version.
gettime(col) = strptime('%Y-%m-%d %H:%M', strcol(col).' '.strcol(col+1))

files="File_A.csv File_B.csv File_C.csv" # ... to be continued

plot for [file in files] file using (t=gettime(1), tm_hour(t) < startHour || tm_hour(t) >= endHour ? 1/0 : (((tm_mday(t)-1)*(endHour-startHour) + (tm_hour(t)-startHour))*60 + tm_min(t))*60 + tm_sec(t) + (tm_mday(t)-1)*gapBetweenDaysInSeconds):2 lt 1

假定您每天有一个文件,并且这些文件在变量 files 中列出,以空格分隔。

第一次调用 set xtics 只设置一个 xtic 并删除所有其他的。然后我使用 set xtics add 在循环中添加所有以下抽动。

对于每一行,使用 gettime 用户定义函数解析时间戳并分配给变量 t。在第二步中,我使用 tm_* 函数仅提取月份、小时、分钟和秒的日期,并计算自相应月份的第一天起以秒为单位的 x 轴上的位置。可以使用变量 gapBetweenDaysInSeconds.

给出两天之间的间隔

目前月份被硬编码为 08

这应该是一个合理的起点。