Tengo el siguiente script simple que traza un gráfico:
import matplotlib.pyplot as plt
import numpy as np
T = np.array([6, 7, 8, 9, 10, 11, 12])
power = np.array([1.53E+03, 5.92E+02, 2.04E+02, 7.24E+01, 2.72E+01, 1.10E+01, 4.70E+00])
plt.plot(T,power)
plt.show()
Como está ahora, la línea va directamente de un punto a otro, lo que se ve bien, pero podría ser mejor en mi opinión. Lo que quiero es suavizar la línea entre los puntos. En Gnuplot habría conspirado smooth cplines
.
¿Existe una manera fácil de hacer esto en PyPlot? Encontré algunos tutoriales, pero todos parecen bastante complejos.
python
plot
matplotlib
curvesmoothing
Pablo
fuente
fuente
np.linspace
. Corregido en mi respuesta.spline
¡es obsoleto! spline está en desuso en scipy 0.19.0, use la clase BSpline en su lugar:from scipy.interpolate import BSpline
Para este ejemplo, el spline funciona bien, pero si la función no es inherentemente suave y desea tener una versión suavizada, también puede probar:
si aumenta sigma, puede obtener una función más suavizada.
Proceda con precaución con este. Modifica los valores originales y puede que no sea lo que desea.
fuente
Supongo que te refieres al ajuste de curvas y no al suavizado del contexto de tu pregunta. PyPlot no tiene soporte incorporado para esto, pero puede implementar fácilmente algunos ajustes de curvas básicos usted mismo, como el código que se ve aquí , o si está usando GuiQwt, tiene un módulo de ajuste de curvas . (Probablemente también podría robar el código de SciPy para hacer esto también).
fuente
rbf = Rbf(x, y), fi = rbf(xi)
fue la mejor entre ellas. [1]: scipy-cookbook.readthedocs.io/items/RadialBasisFunctions.html ,Consulte la
scipy.interpolate
documentación para ver algunos ejemplos.fuente