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

Бързо копирах кода, пускам го. Получавам грешка. Разбирам. Оказа се, че имам стара версия на gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) и тя не е способна на това.
Знаейки за гъвкавостта на gnuplot, започнах да търся в световната мрежа и попаднах на няколко подходящи примера в stackoverflow ( и ) и 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 за xtics
Настройка 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) Даваме имена на осите и ги разположаваме красиво:
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
Източник: habr.com
