本节说明
pandas.plotting是 pandas 提供的专用统计图形模块,包含 6 个高级绘图函数:自相关图、自助法图、滞后图、平行坐标图、径向可视化图、安德鲁斯曲线图。前三个用于时间序列诊断,后三个用于高维数据分类可视化。
使用方式
# 方式一:从模块导入函数
from pandas.plotting import autocorrelation_plot
# 方式二:通过 pd.plotting 命名空间调用
pd.plotting.autocorrelation_plot(series)两种方式等价
pd.plotting.xxx()与from pandas.plotting import xxx指向同一函数。
1. autocorrelation_plot() — 自相关图
功能
绘制时间序列的自相关系数随滞后阶数变化的图形,用于检验序列是否存在自相关性(如平稳性)。
语法与参数
pandas.plotting.autocorrelation_plot(series, ax=None, **kwargs)| 参数 | 类型 | 说明 |
|---|---|---|
series | Series | 时间序列数据 |
ax | Axes | 目标坐标轴 |
**kwargs | - | 传递给 matplotlib 的 plot 的额外参数 |
示例
import pandas as pd
import numpy as np
from pandas.plotting import autocorrelation_plot
# 模拟带趋势与噪声的时间序列
ts = pd.Series(np.cumsum(np.random.randn(200)) + 10)
autocorrelation_plot(ts, figsize=(8, 4))读图要点
- 图中灰色虚线为 95% 置信区间,超出虚线说明该阶滞后存在显著自相关。
- 自相关快速衰减至区间内 → 序列趋于平稳。
- 自相关缓慢衰减 → 序列可能存在趋势或非平稳性。
2. bootstrap_plot() — 自助法图
功能
通过有放回重采样(bootstrap)多次计算指定统计量(默认均值),绘制统计量的抽样分布图,用于评估估计量的稳定性与变异性。
语法与参数
pandas.plotting.bootstrap_plot(series, fig=None, size=50, samples=500, **kwds)| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
series | Series | - | 原始数据 |
fig | Figure | None | matplotlib Figure 对象 |
size | int | 50 | 每次重采样的样本量 |
samples | int | 500 | 重采样次数 |
**kwds | - | - | 传递给 matplotlib 的额外参数 |
示例
from pandas.plotting import bootstrap_plot
data = pd.Series(np.random.randn(200) + 5)
bootstrap_plot(data, size=50, samples=300, figsize=(10, 6))输出说明
该函数会生成 3 个子图:
- 左上:原始数据直方图。
- 右上:每次重抽样统计量的分布直方图。
- 下方:重抽样统计量随抽样次数变化的折线图。
3. lag_plot() — 滞后图
功能
绘制时间序列在第 t 期与第 t-lag 期的散点图,用于检测序列的滞后相关性(自相关结构的可视化)。
语法与参数
pandas.plotting.lag_plot(series, lag=1, ax=None, **kwds)| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
series | Series | - | 时间序列 |
lag | int | 1 | 滞后阶数 |
ax | Axes | None | 目标坐标轴 |
**kwds | - | - | 传给 matplotlib scatter 的参数 |
示例
from pandas.plotting import lag_plot
ts = pd.Series(np.cumsum(np.random.randn(200)))
lag_plot(ts, lag=1, figsize=(6, 6))
lag_plot(ts, lag=5) # 不同滞后阶数读图要点
- 点呈正斜率线性分布 → 正自相关。
- 点呈负斜率线性分布 → 负自相关。
- 点呈随机云状 → 该滞后阶数上无明显相关性。
4. parallel_coordinates() — 平行坐标图
功能
将高维数据的每个特征映射为一条平行垂直轴,每个样本用一条折线连接各轴上的取值,并按类别着色,用于多变量分类模式的可视化。
语法与参数
pandas.plotting.parallel_coordinates(frame, class_column, cols=None,
ax=None, color=None, use_columns=False,
xticks=None, colormap=None,
axvlines=True, axvlines_kwds=None,
sort_labels=False, **kwargs)| 参数 | 类型 | 说明 |
|---|---|---|
frame | DataFrame | 数据源 |
class_column | str | 类别列的列名(用于着色与图例) |
cols | list | 参与绘制的特征列(默认除类别列外全部数值列) |
ax | Axes | 目标坐标轴 |
color | list / dict | 自定义各类别颜色 |
use_columns | bool | 是否使用列标签作为 x 轴刻度(默认用位置序号) |
xticks | sequence | 自定义 x 轴刻度 |
colormap | str / Colormap | 颜色映射 |
axvlines | bool | 是否绘制轴分隔竖线,默认 True |
axvlines_kwds | dict | 轴分隔竖线的样式参数 |
sort_labels | bool | 是否按类别排序,默认 False |
示例
from pandas.plotting import parallel_coordinates
# 构造带有类别的数据
df = pd.DataFrame({
'feature1': np.random.randn(90),
'feature2': np.random.randn(90) * 2,
'feature3': np.random.randn(90) * 0.5,
'class': ['A'] * 30 + ['B'] * 30 + ['C'] * 30
})
parallel_coordinates(df, class_column='class',
colormap='viridis', figsize=(10, 6))读图要点
- 同一类别的折线颜色一致,若折线分簇明显,则类别可区分度高。
- 某轴上类别分布分离明显 → 该特征对分类贡献大。
5. radviz() — 径向可视化
功能
将高维数据投影到二维圆形平面:每个特征作为圆周上的一个锚点(等距分布),样本点按照各特征值加权投影到圆内,并按类别着色。适合观察类别聚类结构与特征贡献方向。
语法与参数
pandas.plotting.radviz(frame, class_column, ax=None, color=None,
colormap=None, **kwargs)| 参数 | 类型 | 说明 |
|---|---|---|
frame | DataFrame | 数据源 |
class_column | str | 类别列名 |
ax | Axes | 目标坐标轴 |
color | list / dict | 自定义颜色 |
colormap | str / Colormap | 颜色映射 |
示例
from pandas.plotting import radviz
radviz(df, class_column='class', colormap='plasma', figsize=(8, 8))读图要点
- 样本点靠近某特征锚点 → 该特征对该样本取值较大。
- 不同类别在圆内区域分离 → 特征能有效区分类别。
- 类别混杂重叠 → 特征区分度不足或存在噪声。
6. andrews_curves() — 安德鲁斯曲线
功能
将高维样本映射为傅里叶级数曲线:每个样本对应一条曲线,横轴为
t ∈ [-1, 1],同一类别的曲线颜色相同。通过曲线形态与分簇情况观察类别可分性。
语法与参数
pandas.plotting.andrews_curves(frame, class_column, ax=None,
samples=200, color=None, colormap=None,
**kwargs)| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
frame | DataFrame | - | 数据源 |
class_column | str | - | 类别列名 |
ax | Axes | None | 目标坐标轴 |
samples | int | 200 | 每条曲线的采样点数(t 的分辨率) |
color | list / dict | None | 自定义颜色 |
colormap | str / Colormap | None | 颜色映射 |
示例
from pandas.plotting import andrews_curves
andrews_curves(df, class_column='class',
samples=300, figsize=(10, 5))读图要点
- 同类曲线聚合紧密 → 类别可分性高。
- 不同类别曲线明显分离成束 → 数据存在良好的判别结构。
- 曲线相互缠绕 → 类别差异较弱。
📊 六大函数对比速查
| 函数 | 所属任务 | 输入 | 核心用途 |
|---|---|---|---|
autocorrelation_plot() | 时间序列 | Series | 自相关性诊断 |
bootstrap_plot() | 统计推断 | Series | 统计量抽样分布 |
lag_plot() | 时间序列 | Series | 滞后相关性 |
parallel_coordinates() | 高维分类 | DataFrame + 类别列 | 多特征类别模式 |
radviz() | 高维分类 | DataFrame + 类别列 | 圆形投影聚类 |
andrews_curves() | 高维分类 | DataFrame + 类别列 | 傅里叶曲线分类 |
🔗 相关笔记
- 独立绘图方法:2. 独立绘图方法
- 核心 plot 接口:1. DataFrame.plot 与 Series.plot
- 相关章节:十七、窗口计算(时间序列诊断常配合 rolling 统计)