我有一些与关系相关的数据,y = B*exp(Cx)
我希望能够绘制数据并根据关系确定值:
ln(y) = ln(B) + Cx
x
我有和的原始数据值y
。我希望绘制它们并在图表上绘制最佳拟合线,并显示最佳拟合线的方程,以确定等于 的 y 截距,ln(B)
从而确定B
到目前为止我有这个
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}
\addplot table[x={x}, y={y}] {
x y
0.284 0.01
0.433 0.59
0.485 2.97
0.500 3.96
0.531 9.48
0.558 18.00
0.597 45.00
0.621 94.00
0.696 1136.00
};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
它绘制了数据,尽管是在对数 10 图上,而不是我希望的自然对数。
我努力了
\addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};
但无济于事。
我正在使用最新版本的 pgf 图,如果不在半对数轴上,回归线确实有效。
答案1
我认为问题只是在于你没有在序言中加载包。以你的例子(基本上是逐字逐句的)为例,并添加适当的包对我来说是可行的。
关于方程,您可以通过\pgfplotstableregressiona
和访问它们\pgfplotstableregressionb
,并且我们可以通过简单地解析数字从必须转换a x + b
为。请注意,它始终被写入,这就是为什么我在完成计算后立即将其写入的原因。如果您有:A e^{B x}
\pgfmathresult
\fitb
\pgfmathparse{exp(\pgfplotstableregressionb)}
\addlegendentry{Fit: \(\pgfmathresult e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}
那么你就不能保证它\pgfmathresult
仍然包含指数运算的结果(事实上,你会发现它不包含)。
以下是完整示例:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.13}
\begin{filecontents*}{data.dat}
x y
0.284 0.01
0.433 0.59
0.485 2.97
0.500 3.96
0.531 9.48
0.558 18.00
0.597 45.00
0.621 94.00
0.696 1136.00
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
legend pos=outer north east,
]
\addplot table[x={x}, y={y}] {data.dat};
\addlegendentry{Data}
\addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};
\pgfset{/pgf/fpu=true}
\pgfmathparse{exp(\pgfplotstableregressionb)}
\pgfmathprintnumberto{\pgfmathresult}{\fitb}
\addlegendentry{Fit: \(\fitb e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}
\pgfset{/pgf/fpu=false}
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
输出: