微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Y 轴上为范围着色

如何解决在 Y 轴上为范围着色

使用 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,INF,TIME,$mintime,$maxtime,LIMIT,UN,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 的值(考虑到您的本地时区偏移量)来计算一天中的实际时间,而不是使用集合 $maxtimeLTIME,并在 MF 上午 9 点到下午 5 点之间突出显示。这是 Routers2 使用的技巧,使其能够突出显示工作时间的多个区域。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。