在 Y 轴上对范围进行着色

问题描述 投票:0回答:1

使用 RRDTool 绘图时,我添加了两个 VRULE。我正在绘制温度图表,并且我希望将它们之间的区域绘制在图表上。 RRDTool 有这样的选项吗?我仔细阅读了https://oss.oetiker.ch/rrdtool/doc/rrdgraph_graph.en.html但找不到任何东西。

graph rrdtool rrd
1个回答
0
投票

是的,这是可能的,尽管您需要做一些小技巧来实现它。 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 中的错误)

© www.soinside.com 2019 - 2024. All rights reserved.