gnuplot выводит несколько панелей ошибок в зависимости от первого столбца - PullRequest
0 голосов
/ 01 июня 2019

У меня есть файл данных в следующем формате: col1: сюжет [0-9] + col2: x col3: y col4: дельта

Например:

plot0, 1, 1, 2
plot1, 1, 2, 2
plot0, 2, 2, 1
plot1, 2, 3, 2

Я пытаюсь построить yerrorbars для каждого plotX первого столбца с отдельной легендой и цветом.

Не масштабируемый пример:

plot 'ex.dat' using 1:2:3 with yerrorbars, 'ex1.dat' using 1:2:3 with yerrorbars

1 Ответ

1 голос
/ 02 июня 2019

Может как то так? Цвет datapoint + yerrorbar берется из первого столбца с помощью функции GetPlotNo(n) = int(strcol(n)[5:]). Вторая команда сюжета на самом деле строит манекен за пределами диапазона, просто чтобы получить правильные цвета легенды. Если вам нужно соединить точки данных каждого plot1, plot2, ..., это может быть немного сложнее.

Код:

### color of datapoints depending on a column
reset session
set colorsequence classic 

$Data <<EOD
plot0, 1.0, 1, 2
plot1, 1.1, 2, 2
plot0, 2.0, 2, 1
plot1, 2.1, 3, 2
plot2, 1.2, 3, 2
plot0, 3.0, 3, 1
plot1, 3.1, 4, 1
plot2, 2.2, 5, 1
plot2, 3.2, 4, 1
EOD

set datafile separator ","
set xrange[0:4]
set yrange[-1:7]

GetPlotNo(n) = int(strcol(n)[5:])

plot \
    $Data u 2:3:4:(GetPlotNo(1)+1) w yerrorbars pt 7 lc var lw 2 notitle, \
    for [i=0:2] -999 w lp pt 7 lc i+1 lw 2 title sprintf("plot%i",i) noautoscale
### end of code

Результат:

enter image description here

Дополнительно:

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

set datafile missing NaN
plot \
    $Data u 2:3:4:(GetPlotNo(1)+1) w yerrorbars pt 7 lc var lw 2 notitle, \
    for [i=0:2] '' u (i==GetPlotNo(1)?$2:NaN):3:(GetPlotNo(1)+1) w lp pt 7 lc var lw 2 title sprintf("plot%i",i)
...