Gnuplot 5.0. Spiderplot na 4 osiach vlastnými rukami

Gnuplot 5.0. Spiderplot na 4 osiach vlastnými rukami
Pri práci na vizualizácii údajov pre článok vznikla potreba mať 4 osi s pozitívnymi značkami na všetkých.

Ako aj pri iných grafoch článku, rozhodol som sa použiť gnuplot. Najprv som sa pozrel na oficiálnu stránku, kde je množstvo príkladov. Veľmi ma potešilo, keď som objavil potrebný príklad (pár dní sa s tým pohrám a bude to pekné, pomyslel som si).
Gnuplot 5.0. Spiderplot na 4 osiach vlastnými rukami
Rýchlo som skopíroval kód, spustil. Dostal som chybu. Skúmal som. Ukázalo sa, že mám starší gnuplot (Verzia 5.0 patchlevel 3 naposledy upravená 2016-02-21) a ten to takto nezvláda.

S vedomosťou o flexibilite gnuplotu, som začal prehľadávať internet a narazil na niekoľko vhodných príkladov na stackoverflow (Double x-axis on a spider plot with Gnuplot a How to Create a Spider Plot in Gnuplot?) a github (gnuplot-radarchart). Stali sa východiskovým bodom.

Ďalej, moje manipulácie s príkazmi viedli k nasledujúcemu:

0) Vypneme hranice

unset border

1) Vytvoríme 4 nulové osi — 2 hlavné a 2 ďalšie:

set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis

Pár slov o nulových osiach v dokumenácie. Tento krok prináša osy do centra obrázku. A ďalšie sú potrebné na zobrazovanie pozitívnych tikov.

2) Prispôsobujeme zobrazenie tikov na osiach:

max = 1.5 # Pre 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            

Pri tikoch na osiach je trocha viac nastavení.
axis — kde budú tiky, na osi alebo (border — na hranici).
Pre os x, ktorá ide vpravo 0,.5,max. Prvé číslo — začiatok merania, druhé — krok, tretie — koniec merania. Pre prvú od 0, a pre ostatné od 0.5, aby sa nuly neprekážali na začiatku súradnic.

Gnuplot 5.0. Spiderplot na 4 osiach vlastnými rukami
Gnuplot 5.0. Spiderplot na 4 osiach vlastnými rukami

Miešanie núl v strede súradníc.
Všetky intervaly *tics sú nastavené ako 0,.5,max
Bez offset 0.35 pre xtics

Nastavenie scale 0.5,0.25 mirror pridáva značky na os. Ak sa pohrajete s číslami, tak sa zmení ich veľkosť.
Tiež zadávam premenné max, min, pomocou ktorých ovládam hranice osí grafu.
Ďalšie informácie o nastavení tikov možno nájsť v dokumentácii v sekcii Xtics.

3) Prispôsobujeme rozsahy osí:

set xrange  [ min : max ] 
set yrange  [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]

Tu stojí za zmienku, že 2 osi začínajú od min na zvyšovanie a 2 osi — s max na znižovanie.
Ďalšie informácie v sekcii Xrange.

4) Osám priradíme názvy a pekne ich umiestnime:

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) Pripravujeme vstupné údaje
Na každý graf je vyhradených 2 stĺpce. Číslo riadku — číslo osi, piata línia, aby sa uzavrel obrys. Nepárny stĺpec — súradnica x, párny — y. Keďže všetky body sú umiestnené na osiach, tak z páru (x, y) jedna je vždy rovná nule.
Hoci všetky 4 osi sú kladné, niektoré údaje sú umelo presunuté na zápornú polovicu, pretože sa nachádzajú na hlavných osiach 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 prvej bodu

Výsledok
Gnuplot 5.0. Spiderplot na 4 osiach vlastnými rukami
Úplný 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

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster