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 x
e 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 \pgfplotstableregressiona
e \pgfplotstableregressionb
, e podemos converter de necessário a x + b
simplesmente A e^{B x}
analisando os números. Observe que \pgfmathresult
isso é gravado o tempo todo, por isso estou escrevendo \fitb
assim 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 \pgfmathresult
ainda 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: