Gnuplot 5.0. Spiderplot na 4 ose vlastnoručně

Gnuplot 5.0. Spiderplot na 4 ose vlastnoručně
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ý příklad (trochu si pohrám a bude to hezké, pomyslel jsem si).
Gnuplot 5.0. Spiderplot na 4 ose vlastnoručně
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 (Dvojité x-osy na pavučinovém grafu s Gnuplotem a Jak vytvořit pavučinový graf v Gnuplotu?) a githubu (gnuplot-radarchart). Tyto se staly východiskem.

Dále, mé manipulace s příkazy vedly k následujícímu:

0) Vypneme hranice

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 dokumentaci. 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.

Gnuplot 5.0. Spiderplot na 4 ose vlastnoručně
Gnuplot 5.0. Spiderplot na 4 ose vlastnoručně

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 Xtics.

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 Xrange.

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
Gnuplot 5.0. Spiderplot na 4 ose vlastnoručně
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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster