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 функций.
Предполагаемые пользователи:

Каждый, кому нужно автоматически генерировать графики по данным или функциям.
Учебники:

* IBM Developerworks: Visualize your data with gnuplot
* gnuplot tips

Пакеты, делающие подобные операции:

* Grace (xmgr) проект одного возраста с gnuplot, но больше ориентирован на использование Графического Пользовательского Интерфейса (GUI). Консольный способ управления не слишком удобен. Если вы предпочитаете "тыкать и кликать" мышью - возможно это более подходящий вариант.
* RLPlot использует современный KDE-GUI, просто в обращении и может быть более подходящим для построения пары графиков. Скриптинг с использованием RLPlot достаточно сложное занятие.Возможно доступен вариант использования DCOP-интерфейса.
* Если gnuplot полностью не удовлетворяет вашим потребностям - можно попробовать создать что то свое с помощью scipy или gnu plotutils (хорошим примером может служить piechart)

Лицензия:

Не смотря на свое название gnuplot лицензирован не под GPL. Используется некая собственная лицензия.

Домашнюю страницу можно найти по адресу http://www.gnuplot.info/.

gnuplot доступен как в Debian так и в Ubuntu.