
Při práci na vizualizaci dat pro článek vznikla potřeba mít 4 osy s pozitivními značkami na všech.
Jak pro ostatní grafy článku, rozhodl jsem se použít gnuplot. Nejprve jsem nahlédl na oficiální web, kde je spousta příkladů. Velmi mě potěšilo, když jsem našel potřebný (trochu si pohrám a bude to hezké, pomyslel jsem si).

Rychle jsem zkopíroval kód, spustil ho. Dostávám chybu. Zjišťuji. Ukázalo se, že mám starý gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) a ten to neumí.
S vědomím flexibility gnuplotu jsem začal prozkoumávat prostory světové sítě a narazil na několik vhodných příkladů na stackoverflow ( a ) a githubu (). Tyto se staly východiskem.
Dále, mé manipulace s příkazy vedly k následujícímu:
0) Vypneme
unset border
1) Vytvoříme 4 nulové linie — 2 základní a 2 doplňkové:
set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis
Pár slov o nulových liniích v . Tato operace umožňuje posunout osy do středu obrázku. Doplňkové linie jsou potřeba, aby na nich byly zobrazeny pozitivní tiky.
2) Nastavíme zobrazení tiků na osách:
max = 1.5 # Pro flexibilitu
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
S tiky na osách je nastavení trochu složitější.
axis — kde budou tiky umístěny, na ose nebo (border — na hranici).
Pro osu x, která směřuje vpravo 0,.5,max. První číslo je počátek, druhé krok, třetí konec. Pro první od 0, a pro ostatní od 0.5, aby se nuly nepřekrývaly na začátku souřadného systému.


Mísení nul ve středu souřadného systému.
Všechny intervaly *tics jsou nastaveny jako 0,.5,max
Bez offset 0.35 pro xtics
Nastavení scale 0.5,0.25 mirror přidává zářezy na osu. Pokud si pohrajete s čísly, jejich velikost se změní.
Také zadávám proměnné max, min, pomocí kterých ovládám hranice os grafu.
Další informace o nastavení tiků lze najít v dokumentaci v sekci .
3) Nastavujeme rozsahy os:
set xrange [ min : max ]
set yrange [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]
Zde je třeba poznamenat, že 2 osy začínají měřit od max k nárůstu a 2 osy — od ); například, předáním k poklesu.
Dodatkové informace v sekci .
4) Pojmenujeme osy a umístíme je esteticky:
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) Vytváříme vstupní data
Na každý graf je vyhrazeno 2 sloupce. Číslo řádku – číslo osy, pátý řádek pro uzavření kontury. Neparný sloupec – souřadnice x, sudý — y. Vzhledem k tomu, že všechny body leží na osách, tak z páru (x, y) je vždy jedno rovno nule.
I když jsou všechny 4 osy kladné, některá data jsou uměle posunuta na zápornou polovinu, protože leží na hlavních osách x a 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 #Duplikát prvního bodu
Výsledek

Celý kód
#!/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
Zdroj: habr.com
