【发布时间】:2014-10-03 03:22:48
【问题描述】:
这是我之前的问题的后续:"gnuplot bashshell to plot several curves in one window" Christoph 对此提供了帮助。但是,我已经简化了我的问题,假设我可以自己从那里前进。不用说,我做不到! :(我真正想在一个无花果框架中绘制的是一组数据文件,并且对于每个数据文件都有一条适合它的曲线(指数函数)。不幸的是,我被 gnuplot 4.2 卡住了,它不允许我使用 for 循环 和 iterations。我将不胜感激任何建议。以下 bash 脚本在单独的文件中打印九条曲线及其拟合线。
#!/bin/bash
for Counter in {1..9}; do
FILE="dataFile"$Counter".data"
gnuplot <<EOF
set xlabel "k"
set ylabel "p(k)"
set term png
set output "${FILE}.png"
title_fexp(a,b) = sprintf('exp(x) = %.2f * e(%.2f)', a, b)
expon(x) = c * exp(-x*d)
fit [10:100] expon(x) '${FILE}' via c,d
plot [1:50] expon(x)t title_fexp(c,d), '${FILE}'
EOF
done
【问题讨论】:
-
你已经准备好所有的拟合参数了吗?然后就是将它们读入 gnuplot 的问题。如果它们在外部文件中,您可以使用外部命令读取它们。例如。您有一个
temp文件,其中包含文本12345,您可以使用a=system("awk 'NR == 1 {print $1}' temp")将其读取到 gnuplot。 -
实际问题是什么?最终的情节应该是怎样的?
-
@Miguel 不,我没有单独文件中的拟合参数。您是否建议我先运行上面的代码估计拟合参数,将它们写入文件,然后再从该文件中读取它们进行绘图?
-
@MarkSetchell 我无法添加一个数字来说明我的意思,所以用文字来说:最终的图有来自数据文件的九条曲线,每条曲线都有一条适合它的线。喜欢这里第 7 节中的图片:link
-
有机会升级到 4.6 版吗?然后你可以使用 gnuplot 的循环和gnuplot linear fit within for loop 的解决方案。
标签: bash loops gnuplot curve-fitting