austin richardson
En matplotlib, ¿cómo represento el error como una región sombreada en lugar de barras de error?
Por ejemplo:
más bien que
Ignorando la interpolación suave entre puntos en su gráfico de ejemplo (que requeriría hacer alguna interpolación manual, o simplemente tener una resolución más alta de sus datos), puede usar pyplot.fill_between()
:
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape)
y += np.random.normal(0, 0.1, size=y.shape)
plt.plot(x, y, 'k-')
plt.fill_between(x, y-error, y+error)
plt.show()
Véase también el ejemplos de matplotlib.
-
Perfecto. Sí, no quise incluir un ejemplo con líneas suavizadas.
–Austin Richardson
18/10/2012 a las 15:49
-
¿Alguna idea de cómo hacer que esto muestre cuadros sombreados en lugar de una banda sombreada? Mi primer instinto fue abusar
lw
pero parece no usar las mismas unidades que los ejes.– Benjamín Banner
27/08/2013 a las 20:30
-
@BenjaminBannier No estoy completamente seguro de lo que quieres decir. Suena como si quisiera dibujar un cuadro en cada punto, su altura es la misma que la de la barra de error, mientras que el ancho debe ser tal que conecten (toquen) los cuadros vecinos. ¿Es eso correcto?
– usuario707650
28 de agosto de 2013 a las 9:13
-
@EL_DON ¿Quiere decir que le gustaría una leyenda con una línea negra + una banda azul, y el texto sería algo así como “región de error de datos + 1 sigma”?
– usuario707650
26 de agosto de 2016 a las 6:27
-
@Allan, si las únicas barras de error que tiene son horizontales, probablemente debería voltear los ejes de su problema real (y, por lo tanto, también la figura). Normalmente, la variable independiente es la que no tiene (o tiene muy pequeñas) barras de error. Es posible que pueda hacer trampa intercambiando sus variables de datos y, en matplotlib, también intercambiando los ejes.
– usuario707650
27 de abril de 2017 a las 7:40
Boris Gorelik
Esta es básicamente la misma respuesta proporcionada por Evert, pero ampliada para mostrar algunas opciones geniales de fill_between
from matplotlib import pyplot as pl
import numpy as np
pl.clf()
pl.hold(1)
x = np.linspace(0, 30, 100)
y = np.sin(x) * 0.5
pl.plot(x, y, '-k')
x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape) +.1
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color="#CC4F1B")
pl.fill_between(x, y-error, y+error,
alpha=0.5, edgecolor="#CC4F1B", facecolor="#FF9848")
y = np.cos(x/6*np.pi)
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color="#1B2ACC")
pl.fill_between(x, y-error, y+error,
alpha=0.2, edgecolor="#1B2ACC", facecolor="#089FFF",
linewidth=4, linestyle="dashdot", antialiased=True)
y = np.cos(x/6*np.pi) + np.sin(x/3*np.pi)
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color="#3F7F4C")
pl.fill_between(x, y-error, y+error,
alpha=1, edgecolor="#3F7F4C", facecolor="#7EFF99",
linewidth=0)
pl.show()
-
Solución ligeramente mejor: stackoverflow.com/questions/43064524/…
– Shital Shah
17 de abril de 2020 a las 9:11
¿Cómo se generó la trama superior?
– MichaelSB
6 de marzo de 2019 a las 21:26
¿Responde esto a tu pregunta? Trazado de la región de incertidumbre sombreada en un gráfico de líneas en matplotlib cuando los datos tienen NaN
– Reinderien
18 de abril de 2020 a las 22:04