Gnuplot 5.0. Spiderplot на 4 восі сваімі рукамі

Gnuplot 5.0. Spiderplot на 4 восі сваімі рукамі
Пры працы над візуалізацыяй дадзеных для артыкула ўзнікла неабходнасць мець 4 восі са станоўчымі пазнакамі на ўсіх.

Як і для іншых графікаў артыкула, я вырашыў выкарыстоўваць Gnuplot. Перш за ўсё зазірнуў на афіцыйны сайт, дзе ёсць мноства прыкладаў. Вельмі парадаваўся, калі знайшоў патрэбны прыклад (Не шмат папрацую напільнікам і будзе прыгожа, падумаў я).
Gnuplot 5.0. Spiderplot на 4 восі сваімі рукамі
Хуценька скапіяваў код, запускаю. Атрымліваю памылку. Разбіраюся. Аказалася, што ў мяне старэнькі gnuplot (Version 5.0 patchlevel 3 last modified 2016-02-21) і ён так не ўмее.

Ведаючы аб гнуткасці gnuplot, пачаў мацаць прасторы сусветнага павуціння і натыкнуўся на некалькі падыходных прыкладаў на stackoverflow (Double x-axis на павука plot with Gnuplot и How to Create a Spider Plot in Gnuplot?) і github (gnuplot-radarchart). Яны сталі адпраўной кропкай.

Далей, мае маніпуляцыі з камандамі прывялі да наступнага:

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, Каб нулі не перашкаджалі ў пачатку каардынат.

Gnuplot 5.0. Spiderplot на 4 восі сваімі рукамі
Gnuplot 5.0. Spiderplot на 4 восі сваімі рукамі

Змешванне нулёў у цэнтры каардынат.
Усе інтэрвалы *tics настроены як 0,.5,max
без offset 0.35 для xtics

Настройка scale 0.5,0.25 mirror дадае засечкі на вось. Калі пагуляцца з лікамі, то будзе мяняцца іх памер.
Таксама ўводжу зменныя max, min, з дапамогай якіх кірую межамі восяў графіка.
Дадатковую інфармацыю па наладзе цікаў можна знайсці ў дакументацыі ў раздзеле Xtics.

3) Наладжваем дыяпазоны восяў:

set xrange  [ min : max ] 
set yrange  [ min : max ]
set x2range [ max : min ]
set y2range [ max : min ]

Тут варта адзначыць, што 2 восі пачынаюць адлік ад min на павелічэнне і 2 восі - з max на памяншэнне.
Дадатковая інфармацыя ў раздзеле Xrange.

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 #Дубликат первой точки

Вынік
Gnuplot 5.0. Spiderplot на 4 восі сваімі рукамі
Поўны код

#!/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

Дадаць каментар