从多天绘制相同的 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
。
这应该是一个合理的起点。
我的数据是这样的: 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
。
这应该是一个合理的起点。