Попытка выделить гистограмму на отдельной полосе и установить собственные метки - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть несколько файлов CSV, содержащих одну строку, например:

y,ymin,ymax

Например:

35.4587,36.6542,34.3546

Я хочу сделать гистограмму с барами ошибок, которая выглядит следующим образом:

enter image description here

Но вместо этого у меня есть это:

enter image description here

Потому что я не понимаю, как разделять блоки и как назначать им произвольные метки, независимо от того, какие данные я рисую.

Вот мой код, так далеко:

reset

set datafile separator ','

set style fill solid 1 border lt -1
set style histogram errorbars gap 2 lw 2
set style data histograms

set ylabel 'time (seconds)'

plot 'data1.csv' using 1:2:3 notitle, \
'data2.csv' using 1:2:3 notitle, \
'data3.csv' using 1:2:3 notitle, \
'data4.csv' using 1:2:3 notitle

С уважением.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Существует отдельный стиль печати with boxerrorbars. Он имеет несколько вариантов в зависимости от того, что содержат столбцы данных. Форма с 5 столбцами должна работать для вас: 5 columns: x y ylow yhigh xdelta Вы можете добавить 6-й столбец для ярлыков ti c.

$Data1 <<EOD
60 58 62
EOD
$Data2 <<EOD
37 36 38
EOD
$Data3 <<EOD
46 44 48
EOD
$Data4 <<EOD
63 61 65
EOD

array titles = ["One potato", "Two potato", "Three potato", "Four"]

unset key
set border 3
set tics nomirror
set style fill solid border lc "black"
set style data boxerrorbars
set xrange [0:5]

plot for [i=1:4] sprintf("$Data%d",i) using (i):1:2:3:(.2):xticlabel(titles[i])

enter image description here

1 голос
/ 20 февраля 2020

Если честно, я не особо ладил со стилями гистограммы. Но я уверен, что есть способ достичь того, что вы хотите. Один из альтернативных способов - нарисовать его «вручную», используя with boxes и with yerrorbars, и настроить его так, как вам нравится. Примерно так, который, безусловно, можно оптимизировать, например, с помощью al oop, в зависимости от ваших данных.

Код:

### "manual" histogram with errorbars
reset session

$Data1 <<EOD
60 58 62
EOD

$Data2 <<EOD
37 36 38
EOD

$Data3 <<EOD
46 44 48
EOD

$Data4 <<EOD
63 61 65
EOD

set boxwidth 0.4
unset key
set xrange [0.5:4.5]
set yrange [35:70]

set style fill solid 1 border lt -1
set errorbars lw 2 ls -1

plot $Data1 u (1):1:xtic("Some text")        w boxes lc 1, '' u (1):1:2:3 w yerrorbars pt -1, \
     $Data2 u (2):1:xtic("Some other text")  w boxes lc 2, '' u (2):1:2:3 w yerrorbars pt -1, \
     $Data3 u (3):1:xtic("Arbitrary text")   w boxes lc 3, '' u (3):1:2:3 w yerrorbars pt -1, \
     $Data4 u (4):1:xtic("Yet another text") w boxes lc 4, '' u (4):1:2:3 w yerrorbars pt -1
### end of code

Результат:

enter image description here

...