我想在數據圖的頂部繪制一條趨勢線。這一定很簡單,但我一直不知道如何實現它。假設我有以下內容:import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsdf = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))sns.lineplot(data=df)ax.set(xlabel="Index", ylabel="Variable", title="Sample")plt.show()結果圖是:我想補充的是一條趨勢線。類似下面紅線的東西:
2 回答

楊魅力
TA貢獻1811條經驗 獲得超6個贊
移動平均線是一種方法(我的第一個想法,并且已經建議)。
另一種方法是使用多項式擬合。由于原始數據中有 100 個點,因此我在下面的示例中選擇了 10 階擬合(數據長度的平方根)。對原始代碼進行一些修改:
idx = [i for i in range(100)]
rnd = np.random.randint(0,100,size=100)
ser = pd.Series(rnd, idx)
fit = np.polyfit(idx, rnd, 10)
pf = np.poly1d(fit)
plt.plot(idx, rnd, 'b', idx, pf(idx), 'r')
此代碼提供了如下圖:

偶然的你
TA貢獻1841條經驗 獲得超3個贊
您可以使用滾動平均值執行類似的操作:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data = np.random.randint(0,100,size=(100, 1))
df["rolling_avg"] = df.A.rolling(7).mean().shift(-3)
sns.lineplot(data=df)
plt.show()
您還可以制作回歸圖來分析如何使用以下方法對數據進行插值:
ax = sns.regplot(x=df.index, y="A", data=df, scatter_kws={"s": 10}, order=10, ci=None)
添加回答
舉報
0/150
提交
取消