有沒有辦法平滑點之間的這條線,使得每個點的線梯度為 0(好像點之間有一個三次函式,每個資料點作為一個轉折點)。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = [1,2,3,4,5,6,7,8,9,10]
y = [8,2,1,7,5,5,8,1,9,5]
ax.plot(x,y)
“未平滑”的情節:

uj5u.com熱心網友回復:
我不確定用例是否可取,但您可以使用樣條插值
選擇:
帶閾值(僅用于“漂亮”的顯示目的)
import numpy as np
from scipy.interpolate import CubicHermiteSpline
g = np.gradient(y)/np.gradient(x)
g = np.where(abs(g)>2, g, 0)
cs = CubicHermiteSpline(x, y, g)
xs = np.linspace(min(x), max(x), num=100)
fig, ax = plt.subplots()
ax.plot(x, y, label='data', marker='o')
ax.plot(xs, cs(xs), label='spline')
ax.legend()
import numpy as np
from scipy.interpolate import CubicHermiteSpline
g = np.gradient(y)/np.gradient(x)
g = np.where(abs(g)>2, g, 0)
cs = CubicHermiteSpline(x, y, g)
xs = np.linspace(min(x), max(x), num=100)
fig, ax = plt.subplots()
ax.plot(x, y, label='data', marker='o')
ax.plot(xs, cs(xs), label='spline')
ax.legend()
輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/438516.html
標籤:Python matplotlib
