鋒哥原創的Matplotlib3 Python數據可視化視頻教程:
2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili
課程介紹
本課程講解利用python進行數據可視化 科研繪圖-Matplotlib,學習Matplotlib圖形參數基本設置,繪圖參數及主要函數,以及Matplotlib基礎繪圖,和Matplotlib高級繪圖。
繪制自相關圖
自相關圖(Autocorrelation Plot)是時間序列分析中重要的可視化工具,用于展示時間序列與其自身滯后版本之間的相關性。它有助于識別數據中的季節性、周期性和隨機性模式。
自相關圖基本概念
-
自相關系數:衡量時間序列與其滯后版本之間相關性的指標
-
滯后值 (Lag):時間序列向后移動的時間單位數
-
置信區間:表示自相關系數是否顯著區別于零的統計邊界
Matplotlib3 繪制自相關圖需要用到statsmodels庫。
?statsmodels? 是一個專注于統計建模與計量經濟分析的Python庫,提供線性回歸、時間序列分析、廣義線性模型、假設檢驗等核心功能,強調模型的統計解釋性(如p值、置信區間)。
pip install statsmodels -i https://pypi.tuna.tsinghua.edu.cn/simple
plot_acf()
是 statsmodels
庫中用于繪制時間序列自相關函數(ACF)的核心工具,廣泛應用于時間序列分析(如ARIMA建模、白噪聲檢驗、隨機游走識別等)。以下是其參數的詳細解析及示例說明:
statsmodels.graphics.tsaplots.plot_acf(x, ax=None, lags=None, alpha=0.05, use_vlines=True, unbiased=False, fft=False, title='Autocorrelation', zero=True, vlines_kwargs=None, **kwargs
)
參數詳解表
參數 | 類型 | 默認值 | 說明 | 注意事項 |
---|---|---|---|---|
x | array_like | - | 時間序列數據(一維數組) | 必需參數,不支持含NaN的序列 24 |
lags | int 或 array_like | None (自動取len(x) ) | 指定計算的滯后階數 | 若為整數,生成np.arange(lags) ;若為數組,直接使用指定滯后點 26 |
alpha | float | 0.05 | 置信區間的顯著性水平 | 設為None 則不顯示置信區間;alpha=0.05 表示95%置信區間 12 |
use_vlines | bool | True | 是否用垂直線+標記繪制ACF | 若為False ,僅繪制標記(如圓點)27 |
unbiased | bool | False | 自協方差計算方式 | True :分母用n-k (無偏估計);False :分母用n (有偏估計)25 |
fft | bool | False | 是否用FFT算法計算ACF | 對長序列加速計算,但可能犧牲精度 2 |
title | str | 'Autocorrelation' | 圖表標題 | 支持自定義標題文本 27 |
zero | bool | `True`` | 是否包含0階滯后(恒為1) | 通常保留,體現序列與自身的完全相關 24 |
ax | Matplotlib Axes | None | 指定繪圖的Axes對象 | 用于多子圖布局,不指定則創建新畫布 27 |
vlines_kwargs | dict | None | 垂直線樣式參數 | 如{"color": "red", "linewidth": 0.8} 2 |
**kwargs | - | - | 傳遞給matplotlib.plot() 的樣式參數 | 如co |
我們來看一個示例:
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf# 生成示例時間序列數據
np.random.seed(42)
n = 200 # 數據點數量# 創建具有季節性的時間序列
seasonal = np.sin(np.linspace(0, 10 * np.pi, n))
trend = np.linspace(0, 5, n)
noise = np.random.normal(0, 0.5, n)
data = trend + seasonal + noise# 創建圖形
plt.figure(figsize=(12, 8), dpi=100)# 繪制時間序列
plt.subplot(2, 1, 1)
plt.plot(data, color='royalblue', linewidth=2)
plt.title('原始時間序列', fontsize=14)
plt.xlabel('時間點', fontsize=12)
plt.ylabel('值', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)# 繪制自相關圖
plt.subplot(2, 1, 2)
plot_acf(data, lags=40, alpha=0.05, color='darkgreen',title='自相關圖 (ACF)', ax=plt.gca(),vlines_kwargs={'colors': 'darkgreen'})
plt.xlabel('滯后階數 (Lags)', fontsize=12)
plt.ylabel('自相關系數', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.ylim(-1.1, 1.1)plt.tight_layout()
plt.show()