Gnuplot-可以“平滑频率”处理整个文件(包括多个数据块/索引)

Gnuplot-可以“平滑频率”处理整个文件(包括多个数据块/索引)

情况

两个计量装置(A、B)提供如下数据

# meter A
time1 14.5
time2 9.3
time3 11.1

由于某种“分类”,来自 A 和 B 的时间戳可能相同(想想每小时销售的不同口味的冰淇淋蛋筒)。

目的

为了获得总量与时间的关系,我想使用“平滑频率”,这应该可以实现我想要实现的目标。

已经尝试过

两个“分箱”数据集都“绘制”(设置表 $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?如果是 - 怎么办?

注意:该解决方案应在 Windows 下运行,无法安装其他软件。(最坏的情况:将组合数据绘制到文件中并删除编辑器中的空白行...)

答案1

我将尝试回答我自己的问题,因为现在我的问题似乎已经解决了。

数据设置

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

我的解决方案很大程度上依赖于“内存文件”(此处的文档),但我假设(不是测试!)它也适用于磁盘上的临时文件。

下面的脚本可能不太复杂,但是它可以起作用:

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_*

重要的技巧不仅仅是使用“设置表“,但要找出何时使用 plotstyle”带桌子“ 也一样。

相关内容