gnuplot: интерактивная среда построения графиков с консольным интерфейсом управления
Содержание |
Оригинальная статья создана Henryk Gerlach. Перевод: Азовцев Юрий
Изображение говорит больше чем сотня слов. Иногда вы смотрите на файл со сплошными строками данных и понимаете всю привлекательность красочных графиков. Если такие мысли вас посещают не слишком часто – вы можете воспользоваться oocalc, но автоматизировать использование средств OpenOffice.org для постоянного автоматического использования достаточно сложно. Именно здесь на сцену выходит gnuplot.
Наглядный пример задачи из жизни: sar – утилита сбора информации о нагрузке на ваш сервер. Обычный поток данных из sar для не слишком загруженной системы выглядит примерно так:
Linux 2.6.9-023stab039.1-smp (host.domain.tld) 02/17/07 00:05:01 CPU %user %nice %system %iowait %idle 01:35:01 all 0.19 0.00 0.03 0.00 99.78 01:45:01 all 0.35 0.00 0.26 0.04 99.35 01:55:01 all 0.41 0.00 0.66 0.00 98.93 02:05:01 all 0.48 0.00 1.19 0.03 98.31 02:15:01 all 0.13 0.00 5.03 0.01 94.83 02:25:01 all 10.34 0.00 20.46 0.00 69.20 02:35:01 all 40.35 0.00 20.79 0.00 38.86 02:45:01 all 15.32 0.00 10.61 0.01 74.06 02:55:01 all 0.08 0.00 0.17 0.00 99.74 03:05:01 all 0.05 0.00 0.01 0.00 99.94 03:15:01 all 0.01 9.39 0.25 9.90 80.45 03:25:01 all 0.00 14.11 0.30 2.79 82.80 03:35:01 all 1.07 0.00 0.04 0.02 98.87 03:45:01 all 0.00 0.00 0.00 0.00 100.00 03:55:01 all 0.05 0.00 0.01 0.00 99.95 04:05:01 all 0.04 0.00 0.00 0.00 99.96 04:15:01 all 0.05 0.00 0.01 0.00 99.95 04:25:01 all 0.01 0.00 0.01 0.02 99.96 04:35:01 all 0.57 0.00 0.25 0.00 99.18 04:45:01 all 0.00 0.00 0.01 0.00 99.99 04:55:01 all 0.01 0.00 0.00 0.00 99.99 Average: all 0.14 0.18 0.06 0.20 99.43
Пропускаем этот набор данных через небольшой фильтр tail +4 | head -n -1 > data.txt мы избавляемся от первых трех и последней строки, способных смутить gnuplot.
Давайте начнем интерактивную сессию работы в gnuplot набрав в любой любимой вами консоли gnuplot. Дальше выполним набор команд:
gnuplot> set xdata time gnuplot> set timefmt "%H:%M:%S" gnuplot> plot [*:*][0:100] "data.txt" using 1:3 with linespoints title "user", \\ > "data.txt" using 1:5 with linespoints title "system", \\ > "data.txt" using 1:6 with linespoints title "iowait"
В первой строке мы сообщаем gnuplot что хотим интерпретировать ось X как ось течения времени.
Второй строкой определяем формат времени оси x (первая колонка в “data.txt”).
И наконец, создаем график. [*:*] дает команду gnuplot автоматически подбирать масштаб по оси X, в то время как [0:100] позволяет графику изменяться от 0 до 100 по оси Y. “data.txt” using 1:3 with linespoints title “user” указывает на необходимость использовать данные из первой и третьей колонок, рисовать их по точкам, соединяя линиями.
Заголовок “user” задает имя легенды определяемой линии.
You can use the help plot command to learn more about the many options to format your graph. Если мы довольны результатом – можно сохранить график в png файл, указав желаемый формат
gnuplot> set terminal png
и определив имя сохраняемого файла:
gnuplot> set output “stats.png”
Все это было красиво, но мы хотим генерировать график автоматически каждые несколько минут. Воспользуемся коротким скриптом на bash:
#!/bin/bash #... generate data.txt with sar, head and tail. OUTFILE="stat.png" gnuplot < set terminal png set output "$OUTFILE" set xdata time set timefmt "%H:%M:%S" plot [*:*][0:100] "data.txt" using 1:3 with linespoints title "user", \\ "data.txt" using 1:5 with linespoints title "system", \\ "data.txt" using 1:6 with linespoints title "iowait" END
Но gnuplot может гораздо больше! Он может строить графики плоских и 3D функций.
Каждый, кому нужно автоматически генерировать графики по данным или функциям.
Не смотря на свое название gnuplot лицензирован не под GPL. Используется некая собственная лицензия.
Домашнюю страницу можно найти по адресу http://www.gnuplot.info/.
gnuplot доступен как в Debian так и в Ubuntu.