在符号图上画出最佳线并显示其方程

在符号图上画出最佳线并显示其方程

我有一些与关系相关的数据,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}

输出:

输出

相关内容