
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 (trochę popracuję z pilnikiem i będzie pięknie, pomyślałem).

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 ( i ) i github (). Stały się one punktem wyjścia.
Następnie moje manipulacje z poleceniami doprowadziły do następującego:
0) Wyłączamy
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 . 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.


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

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
