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

Быстренько скопировал код, запускаю. Получаю ошибку. Разбираюсь. Оказалось, что у меня старенький gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) и он так не умеет.
Зная о гибкости gnuplot, начал шарить просторы всемирной паутины и наткнулся на несколько подходящих примеров на stackoverflow ( in ) и github (). Они стали отправной точкой.
Далее, мои манипуляции с командами привели к следующему:
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 za xtics
Setup scale 0.5,0.25 mirror добавляет засечки на ось. Если поиграться с числами, то будет меняться их размер.
Также ввожу переменные max, min, с помощью которых управляю границами осей графика.
Дополнительную информацию по настройке тиков можно найти в документации в разделе .
3) Настраиваем диапазоны осей:
set xrange [ min : max ]
set yrange [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]
Здесь следует отметить, что 2 оси начинают отсчет от min на увеличение и 2 оси — с max на уменьшение.
Дополнительная информация в разделе .
4) Imenovanje osov in njihovo estetsko postavitev:
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) Oblikovanje vhodnih podatkov
Za vsak graf je namenjenih 2 stolpcev. Številka vrstice — številka osi, peta vrstica, da zaključi konturo. Liha kolona — koordinata x, sode — y. Glede na to, da so vse točke razporejene na osih, je v paru (x, y) ena vedno enaka nič.
Kljub temu, da so vse 4 osi pozitivne, se nekateri podatki namerno premikajo na negativno polovico, ker so na glavnih osah x in 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 #Dupletna točka prve točke
Результат.

Celotna koda
#!/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
Izvor: habr.com
