gnuplot 5.x现在支持数组,但如果没有在外部文件中提供,似乎无法绘制或适合不规则间隔的数据集。我想看到的是能够绘制“y vs x”:
array z[8]=[0,1,2,3,4,5,6,6.4]
array f[8]=[0.468,0.405,0.342,0.279,0.216,0.153,0.090,0.064]
plot z,f
甚至
plot [3,3],[0,0.25] w lines
例如,可以在x = 3处提供方便的垂直标记线,而无需使用无头的箭头:
plot '+' using (3):(0):(0):(0.25) with vectors nohead
可以用这种尴尬的方式实现绘图:
plot sample [j=1:|x|] '+' using (x[j]):(y[j])
但遗憾的是,fit命令无法识别相同的语法。
到目前为止,我想到的唯一方法是将数据写入虚拟文件(数据块),并将其用作绘图和拟合命令的输入:
set print $DATA
print sprintf("# z\tf") ## header line, overwrite old content if any
set print $DATA append ## append data lines
do for [j=1:|z|] {
print sprintf("%f\t%f",z[j],f[j])
}
unset print
y(x)=m*x-y0
y0=0.25
m=1
fit y(x) $DATA via m,y0
plot $DATA t 'data',y(x) w lines t 'fit'
有更好的方法吗?或者有人可以向我解释为什么这样一个明显的任务不是标准绘图/数组实现的一部分?这肯定是我愿望清单上的第一件事。
答案 0 :(得分:0)
描述的是数据块的目的:
$DATA <<EOD
0 0.468
1 0.405
2 0.342
3 0.279
4 0.216
5 0.153
6 0.090
6.4 0.064
EOD
y(x)=m*x-y0
y0=0.25
m=1
fit y(x) $DATA via m,y0
plot $DATA t 'data',y(x) w lines t 'fit'
答案 1 :(得分:0)
感谢Christoph提供广泛的帮助。已经发现,数据块语法和适当的“使用”选项将实现我的目标。数据块的内联规范非常紧凑,可以使用相同的语法替换plot...
和fit...
的预处理:
$DATA <<EOD
0 0.468
1 0.405
2 0.342
3 0.279
4 0.216
5 0.153
6 0.090
6.4 0.064
EOD
y(x)=m*(x-x0)**2+y0
y0=0.9
m=-0.1
x0=4
fit y(x) $DATA using ($1):($1)*($2) via m,x0,y0
plot $DATA using ($1):($1)*($2) t 'data',y(x) w lines t 'fit'
答案 2 :(得分:0)
要按原样绘制存储在数组中的数据,可以按以下方式编写(我在5.4版中尝试过这种方式)。
array z[8]=[0,1,2,3,4,5,6,6.4]
array f[8]=[0.468,0.405,0.342,0.279,0.216,0.153,0.090,0.064]
plot z using (z[$0+1]):(f[$0+1])
乍看之下,似乎(z[$0+1])
可以用1
代替,但是在我尝试的版本中,我必须这样做。