
Når jeg jobbet med datavisualiseringen for artikkelen, oppstod det behov for å ha 4 akser med positive merker på alle.
Som for de andre diagrammene i artikkelen, bestemte jeg meg for å bruke gnuplot. Først tok jeg en titt på den offisielle nettsiden, hvor det finnes mange eksempler. Jeg ble veldig glad da jeg fant det nødvendige (litt finsliping, så blir det fint, tenkte jeg).

Jeg kopierte raskt koden, kjørte den. Fikk en feil. Jeg undersøkte. Det viste seg at jeg hadde en gammel versjon av gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) og den kan ikke gjøre det.
Med tanke på fleksibiliteten til gnuplot, begynte jeg å surfe på internett og kom over flere passende eksempler på stackoverflow ( og ) og github (). De ble utgangspunktet.
Deretter førte mine manipuleringer med kommandoene til følgende:
0) Deaktiverer
unset border
1) Oppretter 4 null-linjer — 2 hovedlinjer og 2 tilleggslinjer:
set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis
Et par ord om null-linjene i . Denne operasjonen sentrerer aksene i midten av bildet. De tilleggslinjene er nødvendige for å vise positive tick-marks.
2) Justerer visningen av ticks på aksene:
max = 1.5 # For fleksibilitet
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
Det er litt mer innstillinger med ticks på aksene.
aksis — hvor tick-merker vil være, på aksen eller (border — på grensen).
For aksen x, som går til høyre 0,.5,max. Det første tallet er startpunktet, det andre er stegstørrelsen, det tredje er sluttpunktet. For den første fra 0, og for de andre fra 0.5, slik at nullene ikke blandes i koordinatens start.


Blandingen av nuller i sentrum av koordinatene.
Alle intervaller *tics er justert som 0,.5,max
Uten offset 0.35 for xtics
Konfigurasjon scale 0.5,0.25 mirror legger til merker på aksen. Hvis man leker med tallene, vil størrelsen på merkene endre seg.
Jeg definerer også variablene max, min, som jeg bruker for å styre aksegrensene til diagrammet.
Ytterligere informasjon om justering av ticks kan finnes i dokumentasjonen under .
3) Justerer akseområdene:
set xrange [ min : max ]
set yrange [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]
Her må det bemerkes at 2 akser starter fra min i økning, og 2 akser — fra maks i reduksjon.
Ytterligere informasjon i seksjonen .
4) Gi ossene navn og plasser dem pent:
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) Danner inndata
Hver graf har 2 kolonner. Radnummeret er aksenummeret, femte rad for å lukke konturen. Oddetallskolonnen er koordinatet x, partalls — y. Siden alle punkter ligger på aksene, vil ett av paret (x, y) alltid være lik null.
Selv om alle 4 aksene er positive, flyttes noen data kunstig til den negative halvdelen fordi de ligger på de primære aksene. x og 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 av det første punktet
Resultatet

Hele koden
#!/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
Kilde: habr.com
