我需要绘制两个文件中的数据。 x 为 file1 的第 1 列,从第 1 行开始到第 50 行。 对于 y,我需要在文件 1 和文件 2 之间包含算术运算。我想使用文件 1 列 2 行 1-50 并将其除以文件 2 列 2 从行(例如 10-60)。 我使用的是windows平台和VS代码编辑器来执行。我是新人,目前知识非常有限。你能给我指导一下如何绘制这个图吗?
非常感谢您的支持
我正在努力如何同时合并和用数学表达式绘图。
你没有提供任何数据,所以我将创建一些测试数据文件(实际上,第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
结果: