Tengo algunos datos que están relacionados por la relación. y = B*exp(Cx)
Quiero poder trazar los datos y determinar el valor de la relación:
ln(y) = ln(B) + Cx
Tengo valores de datos sin procesar de x
y y
. Deseo trazarlos y dibujar una línea de mejor ajuste en el gráfico y también mostrar la ecuación de la línea de mejor ajuste, para determinar la intersección y que es igual a ln(B)
y, como consecuencia, determinarB
Hasta ahora tengo esto
\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 traza los datos, aunque en un gráfico de registro 10 no es un registro natural como me gustaría.
Yo he tratado
\addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};
pero fue en vano.
Estoy usando una versión actualizada de los gráficos pgf y la línea de regresión funciona si no está en el eje semilogarítmico.
Respuesta1
Creo que el problema está simplemente en el paquete que no estás cargando en tu preámbulo. Tomar su ejemplo (básicamente palabra por palabra) y agregar el paquete apropiado me funciona.
Con respecto a la ecuación, se puede acceder a ella a través de \pgfplotstableregressiona
y \pgfplotstableregressionb
y podemos convertirla a x + b
simplemente A e^{B x}
analizando los números. Tenga en cuenta que \pgfmathresult
se escribe todo el tiempo, por eso lo escribo \fitb
tan pronto como haya completado el cálculo. Si en cambio tuvieras:
\pgfmathparse{exp(\pgfplotstableregressionb)}
\addlegendentry{Fit: \(\pgfmathresult e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}
entonces no está garantizado que \pgfmathresult
todavía contenga los resultados de la exponenciación (y de hecho, encontrará que no es así).
Aquí está el ejemplo 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}
Producción: