Гнуплот авторазмера? - PullRequest
0 голосов
/ 03 мая 2019

Я могу создать график с помощью gnuplot. Я использую этот шаблон, чтобы сделать это:

f(w) = (strlen(w) > 10 ? word(w, 1) . "\n" . word(w, 2) : w)

set title "TITLE"
set terminal png truecolor size 960, 720 background rgb "#eff1f0"
set output "/var/www/html/CLUSTER_NAME.png"
set bmargin at screen 0.1
set key center top
set grid
set style data histograms
set style fill solid 1.00 border -1
set boxwidth 0.7 relative
set yrange [*:*]
set format y "%g%%"
set datafile separator ","
plot 'test1.txt' using 2:xtic(f(stringcolumn(1))) title " CPU consumption (%) ", \
'' using 3 title " RAM consumption (%)", \
'' using 0:($2+1):(sprintf("%g%%",$2)) with labels notitle, \
'' using 0:($3+1):(sprintf("     %g%%",$3)) with labels notitle

TITLE и CLUSTER_NAME - это просто имена, которые позволяют мне создать sed с помощью другого скрипта, чтобы заменить эти имена на правильные.

Вначале я использовал это для управления размером моего графика:

set yrange [0:]

Но теперь я использую это для автоматического управления размером:

set yrange[*:*]

Проблема в том, что для некоторого графика либо перекрываются некоторые проценты, либо проценты выходят за рамки, либо пространство между полосой и процентом слишком велико ...

http://image.noelshack.com/fichiers/2019/18/5/1556891635-cluster-cpy-01.png http://image.noelshack.com/fichiers/2019/18/5/1556891641-cluster-mo1-erp-bb-01.png

Нет ли опции, которая позволяет мне управлять этим автоматически, чтобы проценты больше не перекрывались и т. Д ...?

Я думаю, что мы должны поиграть с управлением размерами холста, но я не знаю, как ... Вы можете мне помочь?

1 Ответ

0 голосов
/ 08 июня 2019

Вместо использования гистограммы, вы также можете использовать with boxes и смещать их в нужном направлении.С этим, я полагаю, легче установить метку автоматически в «хороших» позициях.Смещения указаны в символах.Я думаю, вам нужно set yrange вручную, иначе у вас будет минимум и максимум на границе графика.

Код:

### histogram like with boxes and labels
reset session

$Data1 <<EOD
07.2018 12 9
08.2018 14 9
09.2018 13 10
10.2018 16 10
11.2018 16 10
12.2018 16 10
01.2019 15 10
02.2019 15 10
EOD

$Data2 <<EOD
July 2018, 47, 18
August 2018, 70, 19
September 2018, 36, 21
October 2018, 20, 21
November 2018, 44, 21
December 2018, 36, 21
January 2019, 30, 21
February 2019, 31, 22
EOD

set bmargin 3
set boxwidth 0.3 relative
set xdata time
set yrange [0:20]
set format y "%g%%"
Month(s) = strftime("%B\n%Y",strptime("%m.%Y",s))
set xtics offset first 0.2

plot \
    $Data1 u ($0-0.2):2:xtic(Month(strcol(1))) w boxes fc rgb "red" fs solid 1.0 t "CPU consumption (%)", \
     '' u ($0+0.2):3 w boxes fc rgb "green" fs solid 1.0 t "RAM consumption (%)", \
     '' u ($0-0.2):2:(sprintf("%g%%",$2)) w labels center offset 0,0.7 notitle, \
     '' u ($0+0.2):3:(sprintf("%g%%",$3)) w labels center offset 0,0.7 notitle

pause -1

set datafile separator ","
Month(n) = word(strcol(n),1)."\n".word(strcol(n),2)
set yrange[0:75]
plot \
    $Data2 u ($0-0.2):2:xtic(Month(1)) w boxes fc rgb "red" fs solid 1.0 t "CPU consumption (%)", \
     '' u ($0+0.2):3 w boxes fc rgb "green" fs solid 1.0 t "RAM consumption (%)", \
     '' u ($0-0.2):2:(sprintf("%g%%",$2)) w labels center offset 0,0.7 notitle, \
     '' u ($0+0.2):3:(sprintf("%g%%",$3)) w labels center offset 0,0.7 notitle
### end of code

Редактировать:

Я изменил формат $Data2 на ваш исходный формат ввода July 2018, 47, 18.Для обработки этого формата вам необходимо добавить следующие строки перед вторым графиком (выше уже вставлено).

set datafile separator ","
Month(n) = word(strcol(n),1)."\n".word(strcol(n),2)

и изменить строку:

plot \
    $Data2 u ($0-0.2):2:xtic(Month(1)) w boxes ...

Результат:

enter image description here

enter image description here

...