Пры працы над візуалізацыяй дадзеных для артыкула ўзнікла неабходнасць мець 4 восі са станоўчымі пазнакамі на ўсіх.
Як і для іншых графікаў артыкула, я вырашыў выкарыстоўваць Gnuplot. Перш за ўсё зазірнуў на афіцыйны сайт, дзе ёсць мноства прыкладаў. Вельмі парадаваўся, калі знайшоў патрэбны
Хуценька скапіяваў код, запускаю. Атрымліваю памылку. Разбіраюся. Аказалася, што ў мяне старэнькі gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21
) і ён так не ўмее.
Ведаючы аб гнуткасці gnuplot, пачаў мацаць прасторы сусветнага павуціння і натыкнуўся на некалькі падыходных прыкладаў на stackoverflow (
Далей, мае маніпуляцыі з камандамі прывялі да наступнага:
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
З цікамі на восях налад крыху больш.
axis
- дзе будуць знаходзіцца цікі, на восі або (border - на мяжы).
Для восі x
, якая сыходзіць направа 0,.5,max
. Першы лік - пачатак адліку, другі - крок, трэці - канец адліку. Для першай ад 0
, а для астатніх ад 0.5
, Каб нулі не перашкаджалі ў пачатку каардынат.
Змешванне нулёў у цэнтры каардынат.
Усе інтэрвалы *tics
настроены як 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