Mam następujący prosty skrypt, który wykreśla wykres:
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()
Jak to jest teraz, linia biegnie prosto od punktu do punktu, co wygląda dobrze, ale moim zdaniem mogłoby być lepsze. Chcę wygładzić linię między punktami. W Gnuplot knułbym z smooth cplines
.
Czy jest na to łatwy sposób w PyPlot? Znalazłem kilka samouczków, ale wszystkie wydają się dość złożone.
python
plot
matplotlib
curvesmoothing
Paweł
źródło
źródło
np.linspace
. Poprawione w mojej odpowiedzi.spline
jest przestarzałe! spline jest przestarzały w scipy 0.19.0, zamiast tego użyj klasy BSpline:from scipy.interpolate import BSpline
W tym przykładzie splajn działa dobrze, ale jeśli funkcja nie jest z natury gładka i chcesz mieć wygładzoną wersję, możesz również spróbować:
jeśli zwiększysz sigma, możesz uzyskać bardziej wygładzoną funkcję.
Postępuj ostrożnie z tym. Modyfikuje oryginalne wartości i może nie być tym, czego chcesz.
źródło
Zakładam, że masz na myśli dopasowanie krzywej, a nie wygładzanie w kontekście twojego pytania. PyPlot nie ma żadnego wbudowanego wsparcia dla tego, ale możesz łatwo zaimplementować kilka podstawowych dopasowań krzywych samodzielnie, jak w kodzie widzianym tutaj , lub jeśli używasz GuiQwt, ma on moduł dopasowywania krzywych . (Prawdopodobnie możesz też ukraść kod z SciPy, aby to zrobić).
źródło
rbf = Rbf(x, y), fi = rbf(xi)
było najlepszym z nich. [1]: scipy-cookbook.readthedocs.io/items/RadialBasisFunctions.html ,Zobacz
scipy.interpolate
dokumentację, aby zobaczyć kilka przykładów.źródło