Gnuplot 5.0. Спидер график с 4 оси, направлениие на ръка

Gnuplot 5.0. Спидер график с 4 оси, направлениие на ръка
При работа с визуализация на данни за статия, се появи необходимост от 4 оси с положителни надписи на всички.

Както и за другите графики в статията, реших да използвам gnuplot. Първото нещо, което направих, беше да отида на официалния сайт, където има много примери. Много се зарадвах, когато открих необходимия пример (ще поработя малко с файл и ще стане красиво, помислих си).
Gnuplot 5.0. Спидер график с 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            

С тиксовете на осите настройките са малко повече.
ос — къде ще бъдат тиксовете, на осите или (границата — на границата).
За ос x, която отива вдясно 0,.5,max. Първото число — началото на отчет, второто — стъпката, третото — краят на отчета. За първия от 0, а за останалите от 0.5, за да не пречат нулите в началото на координатите.

Gnuplot 5.0. Спидер график с 4 оси, направлениие на ръка
Gnuplot 5.0. Спидер график с 4 оси, направлениие на ръка

Смесване на нулите в центъра на координатите.
Всички интервали *тиксове са настроени така 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. Спидер график с 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