Цель работы: получить график полиграфического качества из имеющегося набора данных со сглаженными кривыми и легендой.
Затевать изучение gnuplot имеет смысл, если вы собираетесь более или менее часто строить всевозможные графики и диаграммы. В противном случае, для одноразового использования, быстрее и проще получить результат от визуальных средств/мастеров создания графиков в электронных таблицах OpenOffice Calc, Gnumeric, Excel.
Хочу отметить, что я не являюсь гуру gnuplot, а излагаю личный, и не такой уж длительный опыт работы с gnuplot. Несмотря на это, думаю начинающим мой опыт сэкономит не один час времени. Не так уж и много русскоязычных публикация по работе с gnuplot.
Хочу отметить, что я не являюсь гуру gnuplot, а излагаю личный, и не такой уж длительный опыт работы с gnuplot. Несмотря на это, думаю начинающим мой опыт сэкономит не один час времени. Не так уж и много русскоязычных публикация по работе с gnuplot.
Сразу приведу результат работы, что бы было понятно о чем далее идет речь:

Обратите внимание на одну важную особенность этого графика - метки по оси Х располагаются на пропорциональном расстоянии в соответствии с их значением (чего я никак не мог добиться в Excel). Кроме того, отсутствует название графика, так как оно будет добавлен в текстовом процессоре во время верстки.
Итак, первое, что нужно сделать - создать в текстовом редакторе (например vim, gedit, geany и т.п) новый файл и сохранить его с любым именем, но с расширением *.sh скрипта. Пусть в нашем случае это будет plot.sh. После сохранения, в консоле сделаем скрипт исполняемым:
chmod +x plot.shИсходные данные находятся в текстовом файле data.csv:
Данные вводятся построчно, каждый столбец отделяется табуляцией. Обратите внимание на первую строку. Надписи "Т=60 °С" и "Т=80 °С" используются для подписи обозначений в легенде (см. рис. готовый график вверху и пункт 10 ниже). Если в надписи входит пробел, то кавычки обязательны. Знак вопроса над первым столбцом указывает, что для этого столбца подписи нет (в моем случае первый столбец значения по оси Х).? "Т=60 °С" "Т=80 °С" 0 0 0 15 7,01 8,43 30 9,43 12,89 60 15,42 23,17 120 14,34 21,71 180 13,76 20,64
Ниже привожу содержимое файла plot.sh (рабочий вариант скрипта без нумерации строк см. в конце поста):
1 #! /usr/bin/gnuplot -persistТеперь по порядку по каждой строке:
2 set terminal png enhanced
3 set output "plot3.png"
4 set size ratio 0.5
5 set xlabel "Время обработки, с"
6 set ylabel "Повышение сорбции красителя, %"
7 set xtics ("0" 0, "15" 15, "30" 30, "60" 60, "120" 120, "180" 180)
8 set autoscale y
9 set grid
10 set key autotitle columnhead
11
12 plot "data.csv" using 1:2 smooth csplines notitle with lines lt -1,\
13 "data.csv" using 1:2 with points pointsize 1 pointtype 7 lt -1,\
14 "data.csv" using 1:3 smooth csplines notitle with lines lt -1,\
15 "data.csv" using 1:3 with points pointsize 1 pointtype 13 lt -1
1 #! /usr/bin/gnuplot -persist1. Указывает какой интерпретатор комманд скрипата будет использоваться.
2 set terminal png enhanced2. Устанавливает тип терминала (растровые и векторные форматы: png, svg, ps, eps, а так же интерактивные x11 и wxt, wxt - по умолчанию). Я выбрал png так как графика будут вставляться в документ MS Word, возможно его новые версии и поддерживают формат svg, но ХР и 2003 о нем ничего не знают.
3 set output "plot3.png"3. Устанавливает вывод в файл с указанным именем.
4 set size ratio 0.54. Устанавливает соотношение длины и ширины графика - по умолчанию равен 1 (когда size ratio не указывается), т.е. график будет "квадратным". Коэффициент 0.5 уменьшает маштаб по оси У и график получается вытянутым вдоль оси Х. Какой выбрать коэффициент и нужен ли он вообще зависит от ваших данных и от того, на чем нужно акцентировать внимание, либо, наоборот, что то нужно сделать таким образом, что бы не бросалось в глаза.
5 set xlabel "Время обработки, с"5, 6. Подписи к осям Х и У.
6 set ylabel "Повышение сорбции красителя, %"
7 set xtics ("0" 0, "15" 15, "30" 30, "60" 60, "120" 120, "180" 180)7. Подписи (метки) по оси Х. Введение этого параметра указывает gnuplot, какие метки нужно установить. В моем случае они совпадают с экспериментальными точками. Этот параметр необязателен и нужен в том случае, когда автоматически созданные метки по каким то причинам не удовлетворяют автора. Однако неудобен тем, что для каждого типа исходных данных этот параметр может изменяться.
8 set autoscale y8. Автоматическое масштабирование оси У. Необязательный параметр. В большинстве случаев облегчает жизнь, если нужно строить большое число однотипных графиков.
9 set grid
9. Включает отображение сетки на графике.
10 set key autotitle columnhead10. Указывает, что нужно использовать первую строку в файле с данными как подпись в легенде для каждого столбца с данными. Очень полезен при построении большого количества графиков.
12 plot "data.csv" using 1:2 smooth csplines notitle with lines lt -1,\12. Команда построения (plot) из файла данных "data.csv" используя столбцы 1 и 2 (using 1:2) сглаженного (smooth) графика методом csplines, без подписи (notitle) с тонкой линией with lines, черного цвета lt -1. Обратите внимание, что будет построена только сама линия без точек по которым строилась эта кривая. Для построения точек используется следующая строка 13. Запятая указывает на завершение параметров команды plot. Символ "\" как и в bash указывает, на разрыв строки, т.е. что команда будет продолжена с новой строки.
13 "data.csv" using 1:2 with points pointsize 1 pointtype 7 lt -1,\13. Продолжение комманды плот, но уже с другими параметрами - для построения точек на кривой (with points). Размер точек pointsize 1. Тип маркера точек pointtype 7. Цвет lt -1.
14 "data.csv" using 1:3 smooth csplines notitle with lines lt -1,\15 "data.csv" using 1:3 with points pointsize 1 pointtype 13 lt -114,15 построение второй кривой на этом же графике используя столбцы 1 и 3 и другой маркер точек. Обратите внимание, что последняя строка завершается без запятой и обратного слеша.
Основной минус работы с gnuplot - это необходимость работы с многостраничным англоязычным мануалом. С другой стороны развитый GUI превратился бы просто в кошмар - так как у программы огромное количество параметров. За гибкость приходиться платить временем.
Что еще можно почитать о gnuplot:
на русском - перевод нескольких статей о gnuplot Записки дебианщика
мануал gnuplot на оф. сайте
Отличная книга (на англ.) Gnuplot in Action: Understanding Data with Graphs Philipp K. Janert (кто ищет, тот найдет)
GNUplot FAQ
LinuxFormat #71
./plot.sh
ОтветитьУдалить"./plot.sh", line 10: undefined variable: columnhead
./plot.sh
ОтветитьУдалить"./plot.sh", line 10: undefined variable: columnhead
хочу подчеркнуть, что пример работает под gnuplot 4.2 patchlevel 6.
ОтветитьУдалитьхотя параметр columnhead вроде бы не новый...