如何在 gnuplot 中对两个不同文件中具有行偏移量的两列进行算术运算?

问题描述 投票:0回答:1

我需要绘制两个 CSV 文件中的数据。 x 为 file1 的第 1 列,从第 1 行开始到第 50 行。 对于 y,我需要在文件 1 和文件 2 之间包含算术运算。我想使用文件 1 列 2 行 1-50 并将其除以文件 2 列 2 从行(例如 10-60)。 我使用的是Windows平台和VS代码编辑器来执行。我是新人,目前的知识非常有限。你能给我指导一下如何绘制这个图吗?

我正在努力如何同时合并和用数学表达式绘图。

plot gnuplot
1个回答
1
投票

你没有提供任何数据,所以我将创建一些测试数据文件(实际上,第1列中从0到99的数字以及第2列中它们的平方数)。

据我了解,您想对两个文件中的数据以及一些行偏移量进行算术运算。

一种可能的解决方案是将 x 和 y 的相关数据(无行偏移和有行偏移)放入数组

X
Y
D
中,然后绘制数组并按索引进行算术运算。您正在使用命令
stats
,它实际上用于统计(您在这里对此不感兴趣),但使用它来将数据放入数组中。

如需进一步阅读:请检查 gnuplot 控制台

help stats
help array
help every
help pseudocolumns
。请注意,gnuplot 中的行索引是从零开始的。

对于您的情况,请跳过测试数据部分并将文件名替换为您的文件名。

脚本:(适用于 gnuplot>=5.2.0,因为使用了数组)

### calculations with data from two different files and different rows
reset session

FILE1 = "SO77339533_1.dat"
FILE2 = "SO77339533_2.dat"

# create some test data
set table FILE1 separator comma
    plot [0:99] '+' u 1:($1**2) w table
set table FILE2 separator comma
    plot [0:99] '+' u 1:($1**2) w table
unset table

set datafile separator comma
n1 = 1      # start row
n2 = 50     # end row
d3 = 10     # row offset
array X[n2-n1+1]
array Y[n2-n1+1]
array D[n2-n1+1]
stats FILE1 every ::n1-1::n2-1 u (X[int($0-n1+2)]=$1) nooutput
stats FILE2 every ::n1-1::n2-1 u (Y[int($0-n1+2)]=$2) nooutput
stats FILE2 every ::n1+d3-1::n2+d3-1 u (D[int($0-n1+2)]=$2) nooutput

plot X u (i=int($0+1),X[i]):(Y[i]/D[i]) w lp pt 7 lc "red" notitle
### end of script

结果:

© www.soinside.com 2019 - 2024. All rights reserved.