
Bij het werken aan de datavisualisatie voor het artikel was het nodig om 4 assen met positieve markeringen aan te brengen.
Net als voor de andere grafieken in het artikel, besloot ik gebruik te maken van gnuplot. Allereerst keek ik op de officiële website, waar veel voorbeelden te vinden zijn. Ik was zeer blij toen ik het benodigde ontdekte (ik denk dat een beetje schuren het mooi zal maken, dacht ik).

Ik kopieerde de code snel, start het op. Ik krijg een foutmelding. Ik kijk het na. Het bleek dat ik een oude versie van gnuplot heb (Version 5.0 patchlevel 3 last modified 2016-02-21) en dat het dat niet kan.
Wetende dat gnuplot flexibel is, begon ik op het wereldwijde web te zoeken en stuitte op enkele geschikte voorbeelden op StackOverflow ( en ) en GitHub (). Ze werden mijn startpunt.
Vervolgens leidde mijn manipulatie met de commando's tot het volgende:
0) Uitschakelen
unset border
1) Maak 4 nul-lijnen - 2 hoofd- en 2 extra:
set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis
Een paar woorden over nul-lijnen in . Deze operatie zorgt ervoor dat de assen in het midden van de afbeelding komen. En de extra zijn nodig om positieve tikken weer te geven.
2) Stel de weergave van de tikken op de assen in:
max = 1.5 # Voor flexibiliteit
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
Met de tikken op de assen is er iets meer instelwerk.
axis — waar de tikken zullen zijn, op de as of (border — op de grens).
Voor de as x, die naar rechts gaat 0,.5,max. Het eerste getal is het begin van de telling, het tweede is de stap, het derde is het einde van de telling. Voor de eerste van 0, en voor de anderen van 0.5, zodat de nullen niet in de beginpositie in de weg zitten.


Mixen van nullen in het centrum van de coördinaten.
Alle intervallen *tics zijn ingesteld als 0,.5,max
Zonder offset 0.35 voor xtics
Instellingen scale 0.5,0.25 mirror voegt tickmarks aan de as toe. Als je met de getallen speelt, zal hun grootte veranderen.
Ik introduceer ook de variabelen max, min, waarmee ik de grenzen van de grafiek assen beheer.
Aanvullende informatie over het instellen van tikken is te vinden in de documentatie in de sectie .
3) Stel de bereik van de assen in:
set xrange [ min : max ]
set yrange [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]
Hier moet worden opgemerkt dat 2 assen beginnen met ); bijvoorbeeld, door omhoog en 2 assen — met Date.diff/2 omlaag.
Aanvullende informatie in de sectie .
4) We geven de assen namen en plaatsen ze mooi:
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) We vormen de invoergegevens
Voor elke grafiek zijn er 2 kolommen toegewezen. Het rijnummer is het asnummer, de vijfde regel om de omtrek te sluiten. De oneven kolom is de coördinaat x, de even kolom — y. Aangezien alle punten zich op de assen bevinden, is van elk paar (x, y) één altijd gelijk aan nul.
Ondanks het feit dat alle 4 de assen positief zijn, worden sommige gegevens kunstmatig naar de negatieve helft verplaatst omdat ze zich op de hoofdassen bevinden x en 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 #Duplicaat van het eerste punt
Resultaat

Volledige code
#!/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
Bron: habr.com
