在 x 轴上,我将时间作为日期 %Y-%m-%d。在 y 轴上我有整数。
基本上,我对每个数据点都有一个日期范围,通常由目标日期和两侧的两周窗口给出。我使用窗口低端和高端的垂直线绘制相对于该目标窗口的数据点。
我想遮蔽低端和高端之间的区域。
我尝试添加“ withfilledcurves x1='2000-01-01'”
谢谢
在 x 轴上,我将时间作为日期 %Y-%m-%d。在 y 轴上我有整数。
基本上,我对每个数据点都有一个日期范围,通常由目标日期和两侧的两周窗口给出。我使用窗口低端和高端的垂直线绘制相对于该目标窗口的数据点。
我想遮蔽低端和高端之间的区域。
我尝试添加“ withfilledcurves x1='2000-01-01'”
谢谢
我想你在这里有几个选择。如果您只想绘制几个阴影区域,则可以使用矩形(我想这会起作用——尽管我还没有测试过):
set xdata time
set timefmt '%Y-%m-%d'
set object rectangle from first '2000-01-01',graph 0 to first '2001-01-14',graph 1 fc rgb "red" solid back
另一种选择是您像这样格式化数据文件:
#date value low-date high-date
2000-01-12 12 2000-01-01 2000-01-26
2000-02-12 12 2000-02-01 2000-02-26
2000-03-12 12 2000-03-01 2000-03-26
请注意,每个“记录”之间有两个空格(三倍行距)。如果您的文件不是三倍行距,您可以使用 sed 轻松完成此操作(在 gnuplot 中):
plot "< sed 'G;G' datafile.dat" ...
在低日期和高日期正好比日期低/高 3600*24*14(两周内的秒数)的特殊情况下,您可以跳过最后两列并像这样绘制它:
NPOINTS=3 #Number of points in datafile.
YHIGH=15
set xdata time
set timefmt '%Y-%m-%d'
set style fill solid .5 noborder #somewhat transparent -- see "help fillstyle"
set yrange [0:YHIGH]
plot for [I=0:NPOINTS-1] 'test.dat' i I u 1:(YHIGH):(3600*24*14*2) w boxes,\
for [I=0:NPOINTS-1] 'test.dat' i I u 1:2 w points ls I+1
第一遍绘制矩形,第二遍绘制点。这仅适用于该点位于范围的中心,并且每个范围正好是 3600*24*14 秒(2 周)。请注意,您必须将点数和 YHIGH 设置为适用于您的数据的某个值。
如果范围可以倾斜 - 例如范围没有以所讨论的点为中心,您可以执行以下操作:
NPOINTS=3
YHIGH=15
TIMEFMT='%Y-%m-%d'
set xdata time
set timefmt TIMEFMT
set style fill solid .5 noborder #somewhat transparent -- see "help fillstyle"
set yrange [0:YHIGH]
#difference between two times in seconds
boxwidth(s1,s2)=strptime(TIMEFMT,s1)-strptime(TIMEFMT,s2)
#average of two times -- number of seconds since 2000 epoch.
boxmidpoint(s1,s2)=(strptime(TIMEFMT,s1)+strptime(TIMEFMT,s2))/2
set macro #just to make it a little easier to read.
BOXARGS='stringcolumn(4),stringcolumn(3)'
plot for [I=0:NPOINTS-1] 'test.dat' i I u (boxmidpoint(@BOXARGS)):(YHIGH):(boxwidth(@BOXARGS)) w boxes,\
for [I=0:NPOINTS-1] 'test.dat' i I u 1:2 ls I+1