使用 RRDTool 绘图时,我添加了两个 VRULE。我正在绘制温度图表,并且我希望将它们之间的区域绘制在图表上。 RRDTool 有这样的选项吗?我仔细阅读了https://oss.oetiker.ch/rrdtool/doc/rrdgraph_graph.en.html但找不到任何东西。
是的,这是可能的,尽管您需要做一些小技巧来实现它。 Routers2 软件使用此技巧来突出显示时间窗口内的工作时间。
为了做到这一点,您创建一个虚拟
CDEF
,它返回一个时间序列,在突出显示的窗口中为 +INF
,在其他地方返回 0。 然后,将其绘制为 AREA
,无论是在线条之前还是之后(使用透明)。
技巧在于
CDEF
必须基于 DEF
,尽管它可以丢弃数据,然后根据 TIME
值进行计算。
例如(为了清晰起见,进行了简化);
rrdtool graph output.png \
DEF:x=file.rrd:ds:AVERAGE \
CDEF:bg=x,POP,TIME,$mintime,$maxtime,LIMIT,UN,0,INF,IF \
AREA:bg#ff808080 \
LINE:x#00ff00:Value \
VRULE:$mintime#ff8080 \
VRULE:$maxtime#ff8080
这将为数据绘制一条线(绿色);其背后是在
$mintime
和$maxtime
时间之间有一个透明的粉红色高光,并且在这两个时间,覆盖了一个红色VRULE
。
注意
CDEF
如何丢弃 x 的初始值,并使用 LIMIT
来判断采样时间是否在范围内,随后使用 IF
给出 0 或 INF
的值,具体取决于结果。 然后将其用于形成高光的 AREA
。
您可以使用
$mintime
的值(考虑到您当地的时区偏移量)来计算一天中的实际时间,并在周一至周五上午 9 点到下午 5 点之间突出显示,而不是使用一组 $maxtime
和 LTIME
。 这是 Routers2 使用的技巧,使其能够突出显示工作时间的多个区域。
有关 RRDTool RPN 函数的更多详细信息,请参阅 https://oss.oetiker.ch/rrdtool/doc/rrdgraph_rpn.en.html
(修正了上面 RPN 中的错误)