Ich habe das folgende einfache Skript, das ein Diagramm zeichnet:
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()
Wie es jetzt ist, geht die Linie direkt von Punkt zu Punkt, was ok aussieht, aber meiner Meinung nach besser sein könnte. Ich möchte, dass die Linie zwischen den Punkten geglättet wird. In Gnuplot hätte ich mit smooth cplines
.
Gibt es eine einfache Möglichkeit, dies in PyPlot zu tun? Ich habe einige Tutorials gefunden, aber sie scheinen alle ziemlich komplex zu sein.
Du könntest benutzen scipy.interpolate.spline
um Ihre Daten selbst zu glätten:
from scipy.interpolate import spline
xnew = np.linspace(T.min(),T.max(),300) #300 represents number of points to make between T.min and T.max
power_smooth = spline(T,power,xnew)
plt.plot(xnew,power_smooth)
plt.show()
spline ist in scipy 0.19.0 veraltet, verwenden Sie stattdessen die Bspline-Klasse.
Das Umschalten von spline
auf Bspline
ist kein einfaches Kopieren/Einfügen und erfordert einige Anpassungen:
from scipy.interpolate import make_interp_spline, BSpline
xnew = np.linspace(T.min(),T.max(),300) #300 represents number of points to make between T.min and T.max
spl = make_interp_spline(T, power, k=3) #BSpline object
power_smooth = spl(xnew)
plt.plot(xnew,power_smooth)
plt.show()
Für dieses Beispiel funktioniert Spline gut, aber wenn die Funktion von Natur aus nicht glatt ist und Sie eine geglättete Version haben möchten, können Sie auch versuchen:
from scipy.ndimage.filters import gaussian_filter1d
ysmoothed = gaussian_filter1d(y, sigma=2)
plt.plot(x, ysmoothed)
plt.show()
wenn Sie Sigma erhöhen, erhalten Sie eine geglättete Funktion.
Fahren Sie mit Vorsicht fort. Es ändert die ursprünglichen Werte und ist möglicherweise nicht das, was Sie wollen.
Ich nehme an, Sie meinen Kurvenanpassung und nicht Antialiasing aus dem Kontext Ihrer Frage. PyPlot hat keine eingebaute Unterstützung dafür, aber Sie können einfach eine grundlegende Kurvenanpassung selbst implementieren, wie den Code hier , oder wenn Sie GuiQwt verwenden, hat es eine Kurvenanpassung Modul . (Sie könnten wahrscheinlich auch den Code von SciPy stehlen, um dies ebenfalls zu tun).