
Lors de la visualisation des données pour l'article, il est devenu nécessaire d'avoir 4 axes avec des étiquettes positives sur tous.
Comme pour les autres graphes de l'article, j'ai décidé d'utiliser gnuplot. J'ai d'abord jeté un coup d'œil sur le site officiel, où il y a de nombreux exemples. J'étais très heureux de découvrir celui dont j'avais besoin (je vais juste travailler un peu avec une lime et ce sera joli, me suis-je dit).

J'ai rapidement copié le code, je le lance. J'obtiens une erreur. Je me penche sur le problème. Il s'est avéré que j'avais une vieille version de gnuplot (Version 5.0 patchlevel 3 date de modification 2016-02-21) et il ne peut pas faire ça.
Sachant la flexibilité de gnuplot, j'ai commencé à fouiller dans les profondeurs du web et j'ai trouvé quelques exemples adaptés sur stackoverflow ( et ) et github (). Ils sont devenus un point de départ.
Ensuite, mes manipulations avec les commandes ont donné ceci :
0) Désactivez
unset border
1) Créons 4 lignes nulles — 2 principales et 2 supplémentaires :
set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis
Quelques mots sur les lignes nulles dans . Cette opération permet de ramener les axes au centre du dessin. Les supplémentaires sont nécessaires pour afficher les marques positives.
2) Configurer l'affichage des marques sur les axes :
max = 1.5 # Pour la flexibilité
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
Il y a un peu plus de paramètres à régler pour les marques sur les axes.
axis — où les marques seront-elles situées, sur l'axe ou (bordure — à la frontière).
Pour l'axe x, qui se dirige vers la droite 0,.5,max. Le premier chiffre est le début du compte, le deuxième est l'incrément, le troisième est la fin du compte. Pour le premier depuis 0, et pour les autres depuis 0.5, afin que les zéros ne gênent pas au début des coordonnées.


Mélanger les zéros au centre des coordonnées.
Tous les intervalles *tics sont configurés comme 0,.5,max
Sans offset 0.35 pour xtics
Configuration scale 0.5,0.25 mirror ajoute des marques sur l'axe. En jouant avec les chiffres, leur taille variera.
Je définis également des variables max, min, que j'utilise pour contrôler les limites des axes du graphique.
Des informations supplémentaires sur la configuration des marques se trouvent dans la documentation à la section .
3) Configurer les plages des axes :
set xrange [ min : max ]
set yrange [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]
Il convient de noter que 2 axes commencent leur compte depuis min en augmentation et 2 axes — depuis max en diminution.
Des informations supplémentaires se trouvent dans la section .
4) Donnons des noms aux axes et plaçons-les de manière esthétique :
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) Formons les données d'entrée
Chaque graphique dispose de 2 colonnes. Le numéro de ligne représente le numéro de l'axe, la cinquième ligne pour fermer le contour. La colonne impaire est la coordonnée x, la paire est y. Étant donné que tous les points se trouvent sur les axes, l'une des paires (x, y) est toujours égale à zéro.
Bien que tous les 4 axes soient positifs, certaines données sont artificiellement déplacées vers la moitié négative, car elles se trouvent sur les axes principaux. x et 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 #Duplication du premier point
Résultat

Code complet
#!/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
Source : habr.com
