
При работа с визуализация на данни за статия, се появи необходимост от 4 оси с положителни надписи на всички.
Както и за другите графики в статията, реших да използвам gnuplot. Първото нещо, което направих, беше да отида на официалния сайт, където има много примери. Много се зарадвах, когато открих необходимия (ще поработя малко с файл и ще стане красиво, помислих си).

Бързо копирах кода и го стартирам. Получавам грешка. Разбира се. Оказа се, че имам по-стара версия на gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) и той не може да направи това.
Знаейки за гъвкавостта на gnuplot, започнах да търся в интернет и попаднах на няколко подходящи примера в stackoverflow ( и ) и github (). Те станаха отправна точка.
След това, моите манипулации с командите доведоха до следното:
0) Изключваме
unset border
1) Създаваме 4 нулеви линии — 2 основни и 2 допълнителни:
set xzeroaxis
set yzeroaxis
set x2zeroaxis
set y2zeroaxis
Две думи за нулевите линии в . Тази операция позволява осите да се съберат в центъра на изображението. А допълнителните служат за показване на положителни тикс.
2) Настройка на показването на тиксовете на осите:
max = 1.5 # За гъвкавост
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
С тиксовете на осите настройките са малко повече.
ос — къде ще бъдат тиксовете, на осите или (границата — на границата).
За ос x, която отива вдясно 0,.5,max. Първото число — началото на отчет, второто — стъпката, третото — краят на отчета. За първия от 0, а за останалите от 0.5, за да не пречат нулите в началото на координатите.


Смесване на нулите в центъра на координатите.
Всички интервали *тиксове са настроени така 0,.5,max
Без offset 0.35 за xtics
Настройка scale 0.5,0.25 mirror добавя чертички на оса. Ако се поиграете с числата, размерът им ще се променя.
Също така въвеждам променливите max, min, с помощта на които управлявам границите на графичните оси.
Допълнителна информация за настройките на тиксовете може да бъде намерена в документацията в раздел .
3) Настройка на диапазоните на осите:
set xrange [ min : max ]
set yrange [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]
Тук следва да се отбележи, че 2 оси започват отчет от min нараства и 2 оси — с max намалява.
Допълнителна информация в раздел .
4) Наименуваме оста и красиво ги разположим:
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) Формулираме входните данни
За всеки график са отделени по 2 колони. Номера на реда — номера на оста, петият ред, за да се затвори контурът. Нечетната колона — координатата x, четната — y. Понеже всички точки се разполагат по осите, то от двойка (x, y) едната винаги е равна на нула.
Въпреки че всичките 4 оси са положителни, някои данни се преместени на отрицателната половина, защото са разположени по основните оси x и 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 #Дубликат на първата точка
Резултат

Пълен код
#!/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
Източник: habr.com
