Gnuplot 从多天绘制同一时间段

Gnuplot 从多天绘制同一时间段,gnuplot,Gnuplot,我的数据如下所示: 档案室 档案室 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

我的数据如下所示: 档案室

档案室

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自动完成。在我看来,您最好的选择是不使用时间轴,而是使用正常的数字轴,并提供您自己的映射来正确标记XTIC,并根据需要调整天数之间的间隔

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

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
gapBetween DaysInSeconds=1000
startHour=9.0
endHour=15.0
设置xtics(“01-08”(13星)*60*60)
设置为[i=2:31]xtics加法(sprintf(“08-%02d”,i)((i-1)*(结束小时开始时间)+13-开始时间)*60*60+(i-1)*天与秒之间的间隙)
#对于gnuplot 5.0
#gettime(列)=时间列(列,“%Y-%m-%d%H:%m”)
#对于所有gnuplot版本。
gettime(列)=strTime(“%Y-%m-%d%H:%m”,strcol(列)。“”.strcol(列+1))
files=“File_A.csv File_B.csv File_C.csv”#。。。待续
使用(t=gettime(1),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)*gap在两天之间的秒数):2 lt 1
这假设您每天有一个文件,这些文件在变量
files
中以空格分隔列出

第一次调用
setxtic
只设置一个xtic,并删除所有其他xtic。然后我使用
setxticsadd
在一个循环中添加以下所有tic

对于每一行,使用
gettime
用户定义函数解析时间戳,并将其分配给变量
t
。在第二步中,我使用
tm.*
函数仅提取月份的日期、小时、分钟和秒,并计算从相应月份的第一个月起以秒为单位给出的X轴上的位置。可以使用变量
gapBetween DaysInSeconds
给出两天之间的间隔

此时,月份硬编码为
08


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

感谢您的帮助,我尝试了代码,它在
set xtics(“01-08”,(13 startHour)*60*60)行中部分工作。
我不得不删除
,但之后我得到了一个绘图。唯一的问题是,只有第一个xtic出现在图表
01-08
,之后,数据被绘制出来,但x轴上没有TIC。即使我输入了不同的时间段,该代码是否有效?比如说08:00-19:00?非常感谢你的代码,我从来没有想到过像那样的方法,我修正了一个错误的逗号,在xtics设置中,开始时间和结束时间的顺序是错误的。是的,现在它应该可以在任何开始和结束时间工作,我用一些虚拟数据测试了它。此外,时间值也可以在单个文件中,也可以在任意数量的文件中。请您向我解释一下代码中的
13
?我不太确定数据是在正确的时间点剪切的,13是你的XTIC的位置。代码应显示从9:00到14:59的数据,tics显示在13:00。因此,如果时间范围是正确的,您可能希望将XTIC设置为12
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