Desenhar a melhor linha no gráfico de semilogia e mostrar sua equação

Desenhar a melhor linha no gráfico de semilogia e mostrar sua equação

Tenho alguns dados relacionados pelo relacionamento. y = B*exp(Cx) Quero poder plotar os dados e determinar o valor do relacionamento: ln(y) = ln(B) + Cx

Eu tenho valores de dados brutos de xe y. Desejo plotá-los e desenhar uma linha de melhor ajuste no gráfico e também exibir a equação da linha de melhor ajuste, para determinar a interceptação y que é igual ln(B)e, como consequência, determinarB

Até agora eu tenho isso

\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}

Que plota os dados, embora em um gráfico de log 10 não seja um log natural como eu gostaria.

eu tentei

\addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};

mas sem sucesso.

Estou usando uma versão atualizada dos gráficos pgf e a linha de regressão funciona se não estiver no eixo semilog.

Responder1

Acho que o problema está apenas no pacote que você não está carregando no preâmbulo. Pegar o seu exemplo (basicamente literal) e adicionar o pacote apropriado funciona para mim.

Em relação à equação, você pode acessá-los por meio de \pgfplotstableregressionae \pgfplotstableregressionb, e podemos converter de necessário a x + bsimplesmente A e^{B x}analisando os números. Observe que \pgfmathresultisso é gravado o tempo todo, por isso estou escrevendo \fitbassim que concluo o cálculo. Se você tivesse:

\pgfmathparse{exp(\pgfplotstableregressionb)}
\addlegendentry{Fit: \(\pgfmathresult e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}

então você não tem garantia de que \pgfmathresultainda contém os resultados da exponenciação (e, de fato, descobrirá que não).

Aqui está o exemplo completo:

\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}

Saída:

saída

informação relacionada