Gnuplot: нанесите каждые N точек в диапазоне, включая края интервала - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть несколько файлов данных с записями около 10 тысяч; каждая запись содержит значение плюс стандартное отклонение для него.

Я строю стандартное отклонение как слегка прозрачное filledcurve. Однако, поскольку было несколько странных артефактов с рисованием такого количества точек, я прибегнул к использованию команды every для построения каждых 99 точек.

'$1' using 1:(\$3-\$5):(\$3+\$5) every 99::0 with filledcurves ls $COUNTER notitle

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

Missing std

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

РЕДАКТИРОВАТЬ: Эффект, который я пытаюсь избежать, это:

flickery plot

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

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

[исправлено, чтобы показать полную обработку значения NaN.Демонстрационный пример с реальным файлом данных]

Вместо every можно создать функцию фильтра для спецификатора using.

set xrange [100:600]
xmax = 600
filter(x) = (int(column(0))%9 == 0  ||  x == xmax) ? 1 : 0
set datafile missing NaN
plot 'silver.dat' using (filter($1)?$1:NaN) : ($2-$3) : ($2+$3) with filledcurves, \
     '' using 1:2 with lines

enter image description here

0 голосов
/ 16 апреля 2019

Вы упомянули радужные узоры при построении около 10 тыс. Точек данных с прозрачными?Хотя разные терминалы выглядят по-разному, я не могу наблюдать такое поведение с gnuplot 5.2.6 под Win7, или мы говорим о разных вещах.Может быть, ваши данные или терминал или ОС особенные?

Тестовый код:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code

wxt терминал:

enter image description here

QT терминал:

enter image description here

pngcairo терминал:

enter image description here

...