
Under arbejdet med datavisualisering til artiklen opstod der behov for at have 4 akser med positive mærker på alle.
Som med de andre grafer i artiklen, besluttede jeg mig for at bruge gnuplot. Først kiggede jeg på den officielle hjemmeside, hvor der er mange eksempler. Jeg blev meget glad, da jeg fandt det nødvendige (jeg tænkte, at det ville blive flot efter lidt arbejde med filen).

Jeg kopierede hurtigt koden og kørte den. Jeg fik fejl. Jeg gik i gang med at undersøge. Det viste sig, at jeg havde en gammel version af gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) og den kan ikke håndtere det.
Da jeg vidste, hvor fleksibel gnuplot er, begyndte jeg at søge i internettets uendeligheder og stødte på flere passende eksempler på stackoverflow ( og ) og github (). De blev min udgangspunkt.
Derefter førte mine manipulationer med kommandoerne til følgende:
0) Afbryd
unset border
1) Opret 4 nul-linjer — 2 hoved- og 2 ekstra:
set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis
Et par ord om nul-linjerne i . Denne operation bringer akserne ind til midten af tegningen. De ekstra er nødvendige for at vise positive ticks på dem.
2) Indstil visningen af ticks på akserne:
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
Der er lidt flere indstillinger for ticks på akserne.
axis — hvor ticks vil være, på aksen eller (border — på grænsen).
For aksen x, der går til højre 0,.5,max. Det første tal er start, det andet er intervall, og det tredje er slut. For det første fra 0, men for de andre fra 0.5, så nullerne ikke støder sammen i koordinatens begyndelse.


Blanding af nuller i koordinatens midte.
Alle intervaller *tics er indstillet som 0,.5,max
Uden offset 0.35 for xtics
Indstillinger scale 0.5,0.25 mirror tilføjer hakker på aksen. Hvis man leger med tallene, ændres deres størrelse.
Jeg indfører også variablerne max, min, som jeg bruger til at styre aksernes grænser.
Yderligere information om indstilling af ticks kan findes i dokumentationen under .
3) Indstil aksernes intervaller:
set xrange [ min : max ]
set yrange [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]
Her skal det bemærkes, at de 2 akser starter fra min i stigende rækkefølge, og de 2 akser — fra max i faldende rækkefølge.
Yderligere information i afsnittet .
4) Vi giver akserne navne og placerer dem pænt:
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) Vi danner inputdata
Der er 2 kolonner afsat til hver graf. Rækkenummeret angiver nummeret på aksen, den femte række for at lukke konturen. Ulige kolonne — koordinat x, lige — y. Da alle punkter er placeret på akserne, vil et par (x, y) altid være lig med nul.
Selvom alle 4 akser er positive, flyttes nogle data kunstigt til den negative halvdel, fordi de er placeret på de primære akser 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 af det første punkt
Resultat

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