Как нарисовать высотный график при помощи gnuplot

Материал из Туристский клуб НГУ
Перейти к навигацииПерейти к поиску


Захотелось мне всё же нарисовать красивый, понятный высотный график. Выбрал я для этого свободную, но очень мощную утилиту gnuplot. Кратко - эта штука может генерировать практически любые графики, диаграмки, визуализации. Возможностей не счесть, но если кому интересно демонстрационные картинки возможностей gnuplot можно посмотреть тут.

Так как в интернете достаточно много публикаций на тему как работает gnuplot, я выложу тут только файлы с коментариями. Подразумевается, что читатель имеет минимальные представления о работе в командной строке.

Для начала надо задать карту высот. На листинге ниже представлена карта высот для графика, который нарисован в начале статьи. Первая колонка отвечает за высоту, вторая за время. Третья и четвёртая колонки используются, чтобы отметить на графике ночёвки (синие квадратики) и локальные препятствия (красные крестики). Первая колонка отвечает за ось Y, остальные за ось X.

# высота дни ночёвки препятствия название 
2425      0     -       -          -  
3750      1     1       1        пер.Шибе
4404      1.5   -      1.5       пик.Акклиматизационный
4404      2     2      -            -
3489      2.5   -      -            -
3489      3     3      -            -
4650      3.5   -      3.5       пер.Дальний
4250      4     4      -            -
5050      4.5   -      4.5       пер.Ташмачет
5150      4.6   -      4.6          -             # пик Купол зададим из скрипта
4550      5     5      -            -

Сохраняем такой файл, например как "alt.txt".

Далее необходимо написать скрипт, который и будет строить график:

#! /usr/bin/gnuplot -persist

set terminal png size 800, 600
set terminal png
set output "alt.png"

set grid      # частота сетки
set ytics 500
set xtics 1

# возможные значения времени и высоты
set xrange [0:5]
set yrange [2200:6000]

# подписи к осям
set xlabel "Дни похода"
set ylabel "Высота, м"

# устанавливаем стили
set style line 1 lt 2 lw 3 # зелёная линия
set style line 2 lt 2 lw 2 ps 1 linecolor rgb "red" # крестики локальный препятствий
set style line 3 lt 5 lw 1 ps 1 linecolor rgb "blue" # квадратики ночёвок

set label 5 "п.Купол" at 4.6,5150 rotate by 85 font "Helvetica,10"   # хотим по-особенному обозначить "Купол" (размер шрифта уменьшен и изменено вращение)

# Собственно рисуем графики:
# - основной график 
# - подписи к локальным препятствиям
# - локальные препятствия
plot  "alt.txt" using 2:1 notitle with line linestyle 1, \                                
      "alt.txt" using 2:1:5 notitle with labels left rotate by 90 font "Helvetica,14", \  
      "alt.txt" using 3:1 notitle with points linestyle 3, \                               
      "alt.txt" using 4:1 notitle with points linestyle 2

Сохранив этот скрипт, например, как "alt.sh" и исполнив ./alt.sh (не забыв при этом добавить привилегии на исполнение), получим график, который и нарисован в начале статьи.

Надеюсь кому-нибудь да пригодиться.

Щербаков Антон