Затенение диапазона по оси Y

При построении графика с помощью RRDTool я добавил два VRULE. Я рисую температуру, и я хотел бы, чтобы область между ними была затенена на графике. Есть ли в RRDTool такая возможность? Я просмотрел https://oss.oetiker.ch/rrdtool/doc/rrdgraph_graph.en.html и ничего не могу найти.


person pkSML    schedule 05.02.2021    source источник


Ответы (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, чтобы выделить несколько областей в рабочее время.

person Steve Shipway    schedule 05.02.2021
comment
Спасибо за ваш ответ Стив! Я проверю man-страницу rrdtool завтра, чтобы лучше понять, что происходит. Рад видеть, что это возможно. Кстати, отличное имя - мое Стивен. - person pkSML; 06.02.2021