Gnuplot 5.0. Wykres pajęczy na 4 osiach własnoręcznie

Gnuplot 5.0. Wykres pajęczy na 4 osiach własnoręcznie
Pracując nad wizualizacją danych do artykułu, wystąpiła potrzeba posiadania 4 osi z dodatnimi etykietami na wszystkich.

Podobnie jak w przypadku innych wykresów artykułu, postanowiłem użyć gnuplot. Najpierw zajrzałem na oficjalną stronę, gdzie znajduje się wiele przykładów. Bardzo się ucieszyłem, gdy odkryłem potrzebny przykład (trochę popracuję z pilnikiem i będzie pięknie, pomyślałem).
Gnuplot 5.0. Wykres pajęczy na 4 osiach własnoręcznie
Szybko skopiowałem kod, uruchamiam. Otrzymuję błąd. Zajmuję się tym. Okazało się, że mam starą wersję gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) i ona nie obsługuje tego.

Znając elastyczność gnuplot, zacząłem przeszukiwać zasoby internetu i natknąłem się na kilka odpowiednich przykładów na stackoverflow (Double x-axis on a spider plot with Gnuplot i How to Create a Spider Plot in Gnuplot?) i github (gnuplot-radarchart). Stały się one punktem wyjścia.

Następnie moje manipulacje z poleceniami doprowadziły do następującego:

0) Wyłączamy granice

unset border

1) Tworzymy 4 linie zerowe — 2 podstawowe i 2 dodatkowe:

set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis

Kilka słów o liniach zerowych w dokumentacji. Ta operacja pozwala na umiejscowienie osi w centrum rysunku. A dodatkowe są potrzebne, aby wyświetlały dodatnie kropki.

2) Ustawiamy wyświetlanie kropek na osiach:

max = 1.5 # Dla elastyczności
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            

Z kropkami na osiach jest nieco więcej ustawień.
axis — gdzie będą znajdować się kropki, na osi czy (border — na granicy).
Dla osi x, która idzie w prawo 0,.5,max. Pierwsza liczba to początek liczenia, druga to krok, trzecia to koniec liczenia. Dla pierwszej od 0, a dla pozostałych od 0.5, aby zera nie przeszkadzały na początku układu odniesienia.

Gnuplot 5.0. Wykres pajęczy na 4 osiach własnoręcznie
Gnuplot 5.0. Wykres pajęczy na 4 osiach własnoręcznie

Mieszanie zer w centrum układu odniesienia.
Wszystkie przedziały *tics są ustawione tak jak 0,.5,max
Bez offset 0.35 do xtics

Konfiguracja scale 0.5,0.25 mirror dodaje znaczki na osi. Jeśli pobawisz się cyframi, ich rozmiar będzie się zmieniać.
Wprowadzam również zmienne max, min, za pomocą których zarządzam granicami osi wykresu.
Dodatkowe informacje na temat ustawiania kropek można znaleźć w dokumentacji w sekcji Xtics.

3) Ustawiamy zakresy osi:

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

Należy zauważyć, że 2 osie zaczynają liczenie od min w górę, a 2 osie — od max w dół.
Dodatkowe informacje w sekcji Xrange.

4) Nazywamy osie i ładnie je rozmieszczamy:

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) Formujemy dane wejściowe
Na każdy wykres przypada 2 kolumny. Numer wiersza to numer osi, piąty wiersz służy do zamknięcia konturu. Nieparzysta kolumna - współrzędna x, parzysta — y. Z uwagi na to, że wszystkie punkty znajdują się na osiach, to w parze (x, y) jedna zawsze równa się zeru.
Mimo że wszystkie 4 osie są dodatnie, niektóre dane są sztucznie przesuwane na ujemną stronę, ponieważ znajdują się na głównych osiach x i 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 #Duplikat pierwszego punktu

Wynik
Gnuplot 5.0. Wykres pajęczy na 4 osiach własnoręcznie
Pełny kod

#!/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

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster