
При работе над визуализацией данных для статьи возникла необходимость иметь 4 оси с положительными метками на всех.
Как и для других графиков статьи, я решил использовать gnuplot. Первым делом заглянул на официальный сайт, где есть множество примеров. Очень порадовался, когда обнаружил нужный пример (не много поработаю напильником и будет красиво, подумал я).

Быстренько скопировал код, запускаю. Получаю ошибку. Разбираюсь. Оказалось, что у меня старенький gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) и он так не умеет.
Зная о гибкости gnuplot, начал шарить просторы всемирной паутины и наткнулся на несколько подходящих примеров на stackoverflow (Double x-axis on a spider plot with Gnuplot и How to Create a Spider Plot in Gnuplot?) и github (gnuplot-radarchart). Они стали отправной точкой.
Далее, мои манипуляции с командами привели к следующему:
0) Отключаем границы
unset border
1) Создаем 4 нулевых линии — 2 основных и 2 дополнительных:
set xzeroaxis set yzeroaxis set x2zeroaxis set y2zeroaxis
Пара слов о нулевых линиях в документации. Данная операция позволяет свести оси в центр рисунка. А дополнительные нужны, чтобы на них отображать положительные тики.
2) Настраиваем отображение тиков на осях:
max = 1.5 # Для гибкости min = -max set xtics axis 0,.5,max in scale 0.5,0.25 mirror norotate autojustify offset 0.35 set ytics axis .5,.5,max in scale 0.5,0.25 mirror norotate autojustify set x2tics axis .5,.5,max in scale 0.5,0.25 mirror norotate autojustify set y2tics axis .5,.5,max in scale 0.5,0.25 mirror norotate autojustify
С тиками на осях настроек чуть больше.
axis — где будут находиться тики, на оси или (border — на границе).
Для оси x, которая уходит вправо 0,.5,max. Первое число — начало отсчета, второе — шаг, третье — конец отсчета. Для первой от 0, а для остальных от 0.5, чтобы нули не мешались в начале координат.
![]() |
![]() |
|---|---|
| Смешивание нулей в центре координат. Все интервалы *tics настроены как 0,.5,max |
Без offset 0.35 для xtics |
Настройка scale 0.5,0.25 mirror добавляет засечки на ось. Если поиграться с числами, то будет меняться их размер.
Также ввожу переменные max, min, с помощью которых управляю границами осей графика.
Дополнительную информацию по настройке тиков можно найти в документации в разделе Xtics.
3) Настраиваем диапазоны осей:
set xrange [ min : max ] set yrange [ min : max ] set x2range [ max : min ] set y2range [ max : min ]
Здесь следует отметить, что 2 оси начинают отсчет от min на увеличение и 2 оси — с max на уменьшение.
Дополнительная информация в разделе Xrange.
4) Даем осям имена и красиво их размещаем:
set label "H_1" at 0, max center offset char 2, 0 set label "H_2" at max+0.1, 0 center offset char -1, 1 set label "H_3" at 0, min center offset char -2, 0 set label "H_4" at min, 0 center offset char 0, 1
5) Формируем входные данные
На каждый график выделено по 2 столбца. Номер строки — номер оси, пятая строка, чтобы замкнуть контур. Нечетная колонка — координата x, четная — y. Ввиду того, что все точки располагаются на осях, то из пары (x, y) одна всегда равна нулю.
Несмотря на то, что все 4 оси положительные, некоторые данные искусственно перемещаются на отрицательную половину, потому что располагаются на основных осях x и y.
0 1 0 1.21 1 0 1.21 0 0 -1 0 -1.06 -1 0 -1.19 0 0 1 0 1.21 #Дубликат первой точки
Результат
#!/usr/bin/gnuplot -persist #файл в кодировке cp1251 чтоб русские буквы отображались в eps set encoding cp1251 set terminal postscript eps enhanced monochrome size 5cm,5cm set output "./img/eps/fig2.eps" unset border set key at -2, 1.5 font 'LiberationSerif, 23' set key left top samplen 4.5 set xzeroaxis set yzeroaxis set x2zeroaxis set y2zeroaxis max = 1.5 min = -max set xtics axis 0,.5,max in scale 0.5,0.25 mirror norotate autojustify offset 0.35 font 'LiberationSerif, 20 set ytics axis .5,.5,max in scale 0.5,0.25 mirror norotate autojustify font 'LiberationSerif, 20 set x2tics axis .5,.5,max in scale 0.5,0.25 mirror norotate autojustify font 'LiberationSerif, 20 set y2tics axis .5,.5,max in scale 0.5,0.25 mirror norotate autojustify font 'LiberationSerif, 20 set xrange [ min : max ] set yrange [ min : max ] set x2range [ max : min ] set y2range [ max : min ] set label "H_1" at 0, max center offset char 2, 0 font 'LiberationSerif, 23' set label "H_2" at max+0.1, 0 center offset char -1, 1 font 'LiberationSerif, 23' set label "H_3" at 0, min center offset char -2, 0 font 'LiberationSerif, 23' set label "H_4" at min, 0 center offset char 0, 1 font 'LiberationSerif, 23' set style line 1 linetype 1 pointtype 7 linewidth 3 linecolor black set style line 2 linetype 2 pointtype 7 linewidth 3 linecolor black plot 'data.csv' using 1:2 title "1" w lp ls 1 ,\ 'data.csv' using 3:4 title "2" w lp ls 2
ссылка на оригинал статьи https://habr.com/ru/post/492352/


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