Graficando el ajuste¶
El objeto Result
tiene dos métodos para realizar gráficos:
.plot()
, que realiza un gráfico de las mediciones y el ajuste,.plot_with_residuals()
, que añade un gráfico de los residuos.
En ambos casos,
se incluye barras de error en y
si fueron parte del ajuste.
Además, aceptan los siguientes parámetros:
x_err
, para graficar barras de error enx
,x_eval
, para evaluar la función ajustada en más puntos,label
, para darle un nombre a la curva del ajuste en la leyenda,fig
yaxes
, que permiten graficar sobre un gráfico ya existente.
Generemos y ajustemos unos datos para ver estas distintas opciones:
In [1]:
Copied!
import numpy as np
from labo1 import curve_fit
def func(x, A, w):
return A * np.cos(w * x)
x = np.linspace(0, 10, 10)
y = func(x, A=10, w=1)
y = np.random.default_rng(0).normal(y)
result = curve_fit(func, x, y, estimate_errors=True)
result
import numpy as np
from labo1 import curve_fit
def func(x, A, w):
return A * np.cos(w * x)
x = np.linspace(0, 10, 10)
y = func(x, A=10, w=1)
y = np.random.default_rng(0).normal(y)
result = curve_fit(func, x, y, estimate_errors=True)
result
Out[1]:
Result(A=10.52 ± 0.24, w=0.9911 ± 0.0044)
Gráfico por defecto¶
Este grafica la función para los mismos x
que las mediciones.
En este caso,
vemos que no es suficiente para obtener una curva suave:
In [2]:
Copied!
result.plot()
result.plot()
Out[2]:
(<Figure size 600x300 with 1 Axes>, <Axes: >)
Evaluando en más puntos¶
Se puede pedir que evalúe en más puntos pasando un número a x_eval
:
In [3]:
Copied!
result.plot(x_eval=100)
result.plot(x_eval=100)
Out[3]:
(<Figure size 600x300 with 1 Axes>, <Axes: >)
O un array
con los valores a evaluar:
In [4]:
Copied!
result.plot(x_eval=np.linspace(-5, 15, 100))
result.plot(x_eval=np.linspace(-5, 15, 100))
Out[4]:
(<Figure size 600x300 with 1 Axes>, <Axes: >)
Múltiples gráficos¶
El método .plot
nos devuelve una figura y los ejes.
Podemos realizar otro gráfico sobre los mismos ejes
si se los pasamos al parámetro axes
de la función.
En este caso,
es útil ponerle un nombre a cada curva con el parámetro label
y generar una leyenda con axes.legend
:
In [5]:
Copied!
fig, axes = result.plot(x_eval=10, label="10")
result.plot(axes=axes, x_eval=100, label="100")
axes.legend(title="Puntos\nevaluados")
fig, axes = result.plot(x_eval=10, label="10")
result.plot(axes=axes, x_eval=100, label="100")
axes.legend(title="Puntos\nevaluados")
Out[5]:
<matplotlib.legend.Legend at 0x12f287820>