При построении графика с помощью RRDTool я добавил два VRULE. Я рисую температуру, и я хотел бы, чтобы область между ними была затенена на графике. Есть ли в RRDTool такая возможность? Я просмотрел https://oss.oetiker.ch/rrdtool/doc/rrdgraph_graph.en.html и ничего не могу найти.
Затенение диапазона по оси Y
Ответы (1)
Да, это возможно, хотя вам нужно сделать небольшую хитрость, чтобы добиться этого. Программное обеспечение Routers2 использует этот прием для выделения рабочих часов в течение временного окна.
Для этого вы создаете фиктивный CDEF
, который возвращает временной ряд, равный +INF
в выделенном окне и 0 в других местах. Затем вы рисуете это как AREA
либо перед вашими строками, либо после (с прозрачностью).
Хитрость заключается в том, что CDEF
должно быть основано на DEF
, хотя он может отбросить данные, а затем вместо этого вычислить на основе значения TIME
.
Например (упрощено для ясности);
rrdtool graph output.png \
DEF:x=file.rrd:ds:AVERAGE \
CDEF:bg=x,POP,0,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
и $maxtime
вы можете использовать значение LTIME
(которое учитывает смещение вашего местного часового пояса) для расчета фактического времени суток и выделения между 9:00 и 17:00 с понедельника по пятницу. Это трюк, используемый Routers2, чтобы выделить несколько областей в рабочее время.