У меня есть следующий простой скрипт, который строит график:
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()
В настоящее время линия идет прямо от точки к точке, что выглядит нормально, но, на мой взгляд, могло бы быть лучше. Я хочу сгладить линию между точками. В Gnuplot я бы строил планы с помощью smooth cplines
.
Есть ли простой способ сделать это в PyPlot? Я нашел несколько руководств, но все они кажутся довольно сложными.
np.linspace
. Исправлено в моем ответе.spline
устарела! spline устарел в scipy 0.19.0, используйте вместо этого класс BSpline:from scipy.interpolate import BSpline
В этом примере сплайн работает хорошо, но если функция не является сглаженной по своей сути, и вы хотите иметь сглаженную версию, вы также можете попробовать:
если вы увеличите сигму, вы можете получить более сглаженную функцию.
Будьте осторожны с этим. Он изменяет исходные значения и может быть не тем, что вам нужно.
источник
Я предполагаю, что вы имеете в виду подгонку кривой, а не сглаживание из контекста вашего вопроса. PyPlot не имеет встроенной поддержки для этого, но вы можете легко реализовать базовую подгонку кривой самостоятельно, например, код, показанный здесь , или, если вы используете GuiQwt, у него есть модуль подгонки кривой . (Вы, вероятно, также можете украсть код из SciPy, чтобы сделать это).
источник
rbf = Rbf(x, y), fi = rbf(xi)
было лучшим среди них. [1]: scipy-cookbook.readthedocs.io/items/RadialBasisFunctions.html ,См.
scipy.interpolate
Документацию для некоторых примеров.источник