ситуация

Два измерительных устройства (A, B) дают данные как

# meter A
time1 14.5
time2 9.3
time3 11.1
…

Благодаря некоторому "биннингу" временные метки от A и B могут быть идентичными (вспомните о мороженых с разными вкусами, продаваемых в час).

цель

Чтобы получить общую сумму в зависимости от времени, я хотел бы использовать "плавную частоту", которая должна делать то, что я хочу достичь.

Уже пробовал

Оба "binned" набора данных "вычерчиваются" (установить таблицу $ DB) во внутренний документ или временный файл на диске. Но наборы данных разделены пустыми строками.

# meter A  
time1 14.5  
time2 9.3  
time3 11.1
    …


# meter B
time2 8.2
time3 2.8
...

Можно ли использовать "плавную частоту" со всем файлом данных, чтобы получить что-то вроде

# meter A+B
time1 14.5  
time2 17.5
time3 13.9
    …

используя только gnuplot? Если так - как?

NB. Решение должно работать под Windows, установка дополнительного программного обеспечения невозможна. (В худшем случае: выведите объединенные данные в файл и удалите пустые строки в редакторе ...)

1 ответ1

0

Я постараюсь ответить на свой вопрос, поскольку сейчас моя проблема, похоже, решена.

Настройка данных

File: "A.dat"
2.3 8.2
3 7
4.3 6.3


1 9
3.3 7.3
2 8
4 6
1.3 9.1
File: "B.dat"
1.1 1.1
3 3
3.1 3.3
2 2


1 1
4.1 4.4
2.1 2.1
4 4

Мое решение в значительной степени опирается на "файлы в памяти" (здесь-документы), но я предполагаю (не testet!) он также работает с временными файлами на диске.

Следующий скрипт может быть не очень сложным, но он работает:

set xrange [0:5]
set yrange [0:*]

# simple binnig function (good enough for this demo)
binwidth = 1.0
bin(x) = binwidth * floor(x/binwidth)

# transfer original data to in-memory-files
set table $A_orig
  plot "A.dat" with table
unset table

set table $B_orig
  plot "B.dat" with table
unset table

# binning into new in-memory-file
set table $A_bin
  plot $A_orig using (bin($1)):2
unset table

set table $B_bin
  plot $B_orig using (bin($1)):2
unset table

# using in memory-files
# unique-filter: x -> avg(y)
set table $A_uniq
  plot $A_bin smooth unique
unset table

set table $B_uniq
  plot $B_bin smooth unique
unset table

# unite the different 'uniqued' datasets
# important: use plotstyle "with table"!
set table $AB_unite
  plot $A_uniq with table, \
       $B_uniq with table
unset table

# apply smooth frequency (x->sum(y))
set table $AB_tmp
  plot $AB_unite smooth freq
unset table
# create final in-memory-file
set table $AB_freq  
  plot $AB_tmp with table
unset table

# plot all results
plot $A_orig with points pointsize 2 title "A (original)", \
     $B_orig with points title "B (original)", \
     $A_bin with points title "A (binned)", \
     $B_bin with points title "B (binned)", \
     $A_uniq with linespoints title "A (binned,unique)", \
     $B_uniq with linespoints title "B (binned,unique)", \
     $AB_freq with linespoints title "A+B (binned,unique,frequency)"

# clean
undef $A_*
undef $B_*
undef $AB_*

Важным трюком является не только использование « set table », но и выяснение того, когда использовать plotstyle « with table ».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .