Nota
Haga clic aquí para descargar el código de ejemplo completo
Curva con banda de error #
Este ejemplo ilustra cómo dibujar una banda de error alrededor de una curva parametrizada.
Una curva parametrizada x(t), y(t) se puede dibujar directamente usando plot
.
[None]
Se puede utilizar una banda de error para indicar la incertidumbre de la curva. En este ejemplo asumimos que el error se puede dar como un error escalar que describe la incertidumbre perpendicular a la curva en cada punto.
Visualizamos este error como una banda de color alrededor de la ruta usando un archivo
PathPatch
. El parche se crea a partir de dos segmentos de ruta (xp, yp) y
(xn, yn) que se desplazan +/- err perpendicularmente a la curva (x, y) .
Nota: Este método de usar a PathPatch
es adecuado para curvas arbitrarias en 2D. Si solo tiene una gráfica estándar de y-vs.-x, puede usar el
fill_between
método más simple (vea también
Llenar el área entre líneas ).
def draw_error_band(ax, x, y, err, **kwargs):
# Calculate normals via centered finite differences (except the first point
# which uses a forward difference and the last point which uses a backward
# difference).
dx = np.concatenate([[x[1] - x[0]], x[2:] - x[:-2], [x[-1] - x[-2]]])
dy = np.concatenate([[y[1] - y[0]], y[2:] - y[:-2], [y[-1] - y[-2]]])
l = np.hypot(dx, dy)
nx = dy / l
ny = -dx / l
# end points of errors
xp = x + nx * err
yp = y + ny * err
xn = x - nx * err
yn = y - ny * err
vertices = np.block([[xp, xn[::-1]],
[yp, yn[::-1]]]).T
codes = np.full(len(vertices), Path.LINETO)
codes[0] = codes[len(xp)] = Path.MOVETO
path = Path(vertices, codes)
ax.add_patch(PathPatch(path, **kwargs))
axs = (plt.figure(constrained_layout=True)
.subplots(1, 2, sharex=True, sharey=True))
errs = [
(axs[0], "constant error", 0.05),
(axs[1], "variable error", 0.05 * np.sin(2 * t) ** 2 + 0.04),
]
for i, (ax, title, err) in enumerate(errs):
ax.set(title=title, aspect=1, xticks=[], yticks=[])
ax.plot(x, y, "k")
draw_error_band(ax, x, y, err=err,
facecolor=f"C{i}", edgecolor="none", alpha=.3)
plt.show()
Referencias
En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos: