Градиентная заливка графика RRDtool

Приветствую Вас:)
В этом материале рассмотрим как нам украсить график(и) полученные в этой статье. В основном мне попадались графики у которых для заливки цвета брались в процентном соотношении от текущей линии графика и раскрашивались, т.е. назначались цвета с шагом к примеру 10%, далее на практике выходит, что 10° или 20° на самом верху будут иметь одинаковый цвет, вот пример (взят из галереи RRDtool, правда измеряется не температура, а давление, но суть не меняет (можно посмотреть онлайн))

Градиентная заливка графика RRDtoolНа графике видно, что значение  676 раскрашено точно так же как и 684,что на мой взгляд не совсем правильно, хотя сам график очень даже симпатичный:).
Мы пойдем другим путем, приступим.
Немного изменим наш код скрипта для генерации графика

#!/bin/sh
#Экспортируем нашу локаль, у меня KOI-8, свою локаль Вы можете проверить командой "locale"
#без этого на график не получится вывести кириллические символы
export LANG=KOI8-R
export LC_ALL=ru_RU.KOI8-R
#Строим график либо все в одну строку, либо через разделитель " ", комментарии в строке вызовут ошибку
rrdtool graph 
/usr/local/www/temperature/test.png 
--width 400 
--height 250 
--font TITLE:13 
--color BACK#444444 
--color SHADEA#444444 
--color SHADEB#444444 
--color CANVAS#444444 
--color FONT#ff7518 
--slope-mode 
--start -1d 
--end now 
--units-exponent 0 
--vertical-label "Температура, C°" 
--title "Температура за сутки" 
--imgformat PNG 
DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE 
LINE1:temperature#00ff00:"" 
CDEF:tp_17=temperature,0,GT,temperature,100,GT,34,temperature,IF,0,IF AREA:tp_17#FF0000 
CDEF:tp_16=temperature,0,GT,temperature,32,GT,32,temperature,IF,0,IF AREA:tp_16#FF1100 
CDEF:tp_15=temperature,0,GT,temperature,30,GT,30,temperature,IF,0,IF AREA:tp_15#FF2200 
CDEF:tp_14=temperature,0,GT,temperature,28,GT,28,temperature,IF,0,IF AREA:tp_14#FF3300 
CDEF:tp_13=temperature,0,GT,temperature,26,GT,26,temperature,IF,0,IF AREA:tp_13#FF4400 
CDEF:tp_12=temperature,0,GT,temperature,24,GT,24,temperature,IF,0,IF AREA:tp_12#FF5500 
CDEF:tp_11=temperature,0,GT,temperature,22,GT,22,temperature,IF,0,IF AREA:tp_11#FF6600 
CDEF:tp_10=temperature,0,GT,temperature,20,GT,20,temperature,IF,0,IF AREA:tp_10#FF7700 
CDEF:tp_09=temperature,0,GT,temperature,18,GT,18,temperature,IF,0,IF AREA:tp_09#FF8800 
CDEF:tp_08=temperature,0,GT,temperature,16,GT,16,temperature,IF,0,IF AREA:tp_08#FF9900 
CDEF:tp_07=temperature,0,GT,temperature,14,GT,14,temperature,IF,0,IF AREA:tp_07#FFAA00 
CDEF:tp_06=temperature,0,GT,temperature,12,GT,12,temperature,IF,0,IF AREA:tp_06#FFBB00 
CDEF:tp_05=temperature,0,GT,temperature,10,GT,10,temperature,IF,0,IF AREA:tp_05#FFCC00 
CDEF:tp_04=temperature,0,GT,temperature,8,GT,8,temperature,IF,0,IF  AREA:tp_04#FFDD00 
CDEF:tp_03=temperature,0,GT,temperature,6,GT,6,temperature,IF,0,IF  AREA:tp_03#FFEE00 
CDEF:tp_02=temperature,0,GT,temperature,4,GT,4,temperature,IF,0,IF  AREA:tp_02#FFFF00 
CDEF:tp_01=temperature,0,GT,temperature,2,GT,2,temperature,IF,0,IF  AREA:tp_01#ffff00 
CDEF:tm_17=temperature,0,LT,temperature,-100,LT,-34,temperature,IF,0,IF AREA:tm_17#0000FF 
CDEF:tm_16=temperature,0,LT,temperature,-32,LT,-32,temperature,IF,0,IF AREA:tm_16#0011FF 
CDEF:tm_15=temperature,0,LT,temperature,-30,LT,-30,temperature,IF,0,IF AREA:tm_15#0022FF 
CDEF:tm_14=temperature,0,LT,temperature,-28,LT,-28,temperature,IF,0,IF AREA:tm_14#0033FF 
CDEF:tm_13=temperature,0,LT,temperature,-26,LT,-26,temperature,IF,0,IF AREA:tm_13#0044FF 
CDEF:tm_12=temperature,0,LT,temperature,-24,LT,-24,temperature,IF,0,IF AREA:tm_12#0055FF 
CDEF:tm_11=temperature,0,LT,temperature,-22,LT,-22,temperature,IF,0,IF AREA:tm_11#0066FF 
CDEF:tm_10=temperature,0,LT,temperature,-20,LT,-20,temperature,IF,0,IF AREA:tm_10#0077FF 
CDEF:tm_09=temperature,0,LT,temperature,-18,LT,-18,temperature,IF,0,IF AREA:tm_09#0088FF 
CDEF:tm_08=temperature,0,LT,temperature,-16,LT,-16,temperature,IF,0,IF AREA:tm_08#0099FF 
CDEF:tm_07=temperature,0,LT,temperature,-14,LT,-14,temperature,IF,0,IF AREA:tm_07#00AAFF 
CDEF:tm_06=temperature,0,LT,temperature,-12,LT,-12,temperature,IF,0,IF AREA:tm_06#00BBFF 
CDEF:tm_05=temperature,0,LT,temperature,-10,LT,-10,temperature,IF,0,IF AREA:tm_05#00CCFF 
CDEF:tm_04=temperature,0,LT,temperature,-8,LT,-8,temperature,IF,0,IF AREA:tm_04#00DDFF 
CDEF:tm_03=temperature,0,LT,temperature,-6,LT,-6,temperature,IF,0,IF AREA:tm_03#00EEFF 
CDEF:tm_02=temperature,0,LT,temperature,-4,LT,-4,temperature,IF,0,IF AREA:tm_02#00FFFF 
CDEF:tm_01=temperature,0,LT,temperature,-2,LT,-2,temperature,IF,0,IF AREA:tm_01#CDFFFF 
GPRINT:temperature:LAST:"Текущая:%3.2lfC°" GPRINT:temp_0:AVERAGE:"Средняя:%3.2lfC°" GPRINT:temp_0:MAX:"Максимальная:%3.2lfC°" GPRINT:temp_0:MIN:"Минимальная:%3.2lfC°j" 
HRULE:0#00ffff

Где мы определили несколько CDEF (CDEF:имя-переменной=выражение_в_обратной_польской_записи (виртуальный DS)):

  • tp_01-tp_17 — будет расскрашивать на графике положительную температуру с шагом в 2 градуса от желтого к красному
  • tm_01-tm_17 — раскрашивают график при отрицательных значениях температуры с шагом в 2 градуса от голубого к синему

Вот что у меня получилось на выходе
Градиентная заливка графика RRDtoolПостроил график за 2 месяца (машинка тестовая, использовалась исключительно для написания статей про Digitemp и RRDtool и проверки правильности скриптов, из-за этого мало значений на графике, т.к. после написания статей термометр был возвращен в серверную:)).
Ну собственно все, спасибо за внимание:)

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Комментарии: 7
  1. Rossi25

    А я так понимаю, что под cgi понималось, что график будет рисоваться не регулярно, а только по запросу из браузера, но про это не написано?

    1. Vladimir (автор)

      Приветствую! Здесь не про cgi(rrdcgi), описан обычный shell скрипт, который по cron генирит графики.
      Вы хотите через rrdcgi делать графики?
      Написал про CGI

  2. ily@

    Чего то не хватает в скрипте, повторил градиентную заливку и когда не было данных (нет питания) значение заливки максимум, а не пустота. Админ открой секрет. И еще поделись скриптом на фазы луны и прочее под графиком.

    1. Vladimir (автор)

      Приветствую! Насчет фаз луны и восходов-заходов на днях напишу.
      Со скриптом — я его особо не отлаживал, писал для статьи, проверил на тестовом компе — все работало, но не тестировал при отсутствии данных.

      1. ily@

        Вы обещали на днях поделится информацией о фазах луны :)

        1. Vladimir (автор)

          Приветствую!
          Что-то дел много:)
          Делал из этого https://github.com/dfeyer/moonphase, если будут вопросы — обращайтесь.

  3. ily@

    Если перейти по ссылке Температура (в шапке), выбрать период год то на графике в мае месяце есть пропуск, смотрится куда красивее чем зашкаливание по максимуму :)

Добавить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания Google.

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.