
Bei der Erstellung der Datenvisualisierung für den Artikel ergab sich die Notwendigkeit, 4 Achsen mit positiven Markierungen anzuzeigen.
Wie bei anderen Diagrammen des Artikels entschied ich mich dafür, gnuplotzu verwenden. Zuerst schaute ich auf die offizielle Website, die viele Beispiele bietet. Ich war sehr erfreut, als ich ein passendes Beispiel fand (ein bisschen Nachbearbeitung und es wird schön aussehen, dachte ich mir).

Ich kopierte schnell den Code und startete ihn. Ich erhielt einen Fehler. Nach einigem Nachdenken stellte sich heraus, dass ich eine ältere Version von gnuplot hatte (Version 5.0 patchlevel 3, zuletzt geändert am 21.02.2016) und es diese Funktion nicht unterstützt.
Wissend um die Flexibilität von gnuplot, begann ich im World Wide Web zu recherchieren und stieß auf einige passende Beispiele auf Stack Overflow ( und ) und GitHub (). Diese wurden zu meinem Ausgangspunkt.
Danach führten meine Manipulationen mit den Befehlen zu Folgendem:
0) Wir deaktivieren
unset border
1) Wir erstellen 4 Null-Linien – 2 Hauptlinien und 2 zusätzliche:
set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis
Ein paar Worte zu den Null-Linien in . Diese Operation bringt die Achsen ins Zentrum der Abbildung. Die zusätzlichen sind nötig, um positive Ticks anzuzeigen.
2) Wir konfigurieren die Anzeige der Ticks auf den Achsen:
max = 1,5 # Für Flexibilität
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
Die Einstellungen der Ticks auf den Achsen sind etwas umfangreicher.
Achse — wo sich die Ticks befinden, auf der Achse oder (border — an der Grenze).
Für die Achse x, die nach rechts verläuft 0,.5,max. Die erste Zahl ist der Startpunkt, die zweite der Schritt, die dritte das Ende. Für die erste von 0, für die anderen von 0.5, damit die Nullen am Ursprung nicht stören.


Die Vermischung von Nullen im Ursprung.
Alle Intervalle *tics sind eingestellt wie 0,.5,max
Ohne offset 0.35 für xtics
Konfiguration scale 0.5,0.25 mirror fügt Markierungen zur Achse hinzu. Wenn man mit den Zahlen spielt, ändert sich ihre Größe.
Ich verwende auch Variablen max, min, mit denen ich die Grenzen der Grafikachsen steuere.
Weitere Informationen zu den Tick-Einstellungen finden Sie in der Dokumentation im Abschnitt .
3) Wir konfigurieren die Bereiche der Achsen:
set xrange [min : max]
set yrange [min : max]
set x2range [max : min]
set y2range [max : min]
Hier ist zu beachten, dass 2 Achsen von min im Zuwachs und 2 Achsen — von max im Abfall beginnen.
Weitere Informationen im Abschnitt .
4) Wir benennen die Achsen und platzieren sie ansprechend:
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) Wir bereiten die Eingabedaten vor
Jeder Graph hat 2 Spalten. Die Zeilennummer ist die Nummer der Achse, die fünfte Zeile schließt die Kontur. Die ungerade Spalte ist die Koordinate x, die gerade — y. Da sich alle Punkte auf den Achsen befinden, ist aus dem Paar (x, y) eine immer gleich null.
Obwohl alle 4 Achsen positiv sind, werden einige Daten künstlich in die negative Hälfte verschoben, da sie auf den Hauptachsen liegen x und 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 des ersten Punkts
Ergebnis

Vollständiger 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
Quelle: habr.com
