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 (Двойна x-ос на спайдър график с Gnuplot и Как да създадете спайдър график в 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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster