Ich habe das folgende einfache Skript, das ein Diagramm darstellt:
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()
So wie es jetzt ist, geht die Linie direkt von Punkt zu Punkt, was in Ordnung aussieht, aber meiner Meinung nach besser sein könnte. Ich möchte die Linie zwischen den Punkten glätten. In Gnuplot hätte ich mit geplottet smooth cplines
.
Gibt es eine einfache Möglichkeit, dies in PyPlot zu tun? Ich habe einige Tutorials gefunden, aber alle scheinen ziemlich komplex zu sein.
np.linspace
. In meiner Antwort korrigiert.spline
ist veraltet! Spline ist in scipy 0.19.0 veraltet, verwenden Sie stattdessen die BSpline-Klasse:from scipy.interpolate import BSpline
In diesem Beispiel funktioniert Spline gut, aber wenn die Funktion von Natur aus nicht glatt ist und Sie eine geglättete Version wünschen, können Sie auch Folgendes versuchen:
Wenn Sie Sigma erhöhen, können Sie eine geglättete Funktion erhalten.
Gehen Sie mit diesem vorsichtig vor. Es ändert die ursprünglichen Werte und entspricht möglicherweise nicht Ihren Wünschen.
quelle
Ich nehme an, Sie meinen Kurvenanpassung und nicht Anti-Aliasing aus dem Kontext Ihrer Frage. PyPlot hat keine eingebaute Unterstützung für diese, aber Sie können einige grundlegende Kurvenanpassung sich leicht implementieren, wie der Code gesehen hier , oder wenn Sie mit GuiQwt eine Kurvenanpassung hat Modul . (Sie könnten wahrscheinlich auch den Code von SciPy stehlen , um dies zu tun).
quelle
rbf = Rbf(x, y), fi = rbf(xi)
war am besten unter ihnen. [1]: scipy-cookbook.readthedocs.io/items/RadialBasisFunctions.html ,In der
scipy.interpolate
Dokumentation finden Sie einige Beispiele.quelle