本节说明
pandas 绘图接口采用**可插拔后端(pluggable backend)**设计:
df.plot()默认使用 matplotlib,但可通过一行配置切换到 plotly、hvplot 等交互式绘图库,无需修改任何绘图代码。
pd.options.plotting.backend
查看当前后端
import pandas as pd
pd.options.plotting.backend
# 默认输出:'matplotlib'设置后端(两种方式)
# 方式一:直接设置选项(全局生效)
pd.options.plotting.backend = 'plotly'
# 方式二:使用 option_context 临时设置(推荐,仅局部生效)
with pd.option_context('plotting.backend', 'plotly'):
df.plot()动态恢复默认
pd.reset_option('plotting.backend') # 恢复为 matplotlib
后端接入原理
pandas 通过 entry points 机制发现已安装的第三方后端包:
| 步骤 | 说明 |
|---|---|
| 1 | 调用 df.plot() 时读取 pd.options.plotting.backend |
| 2 | pandas 查找包名对应的 pandas_plotting_backend entry point |
| 3 | 找到后调用后端的 plot() 入口函数处理数据 |
| 4 | 找不到则回退到内置 matplotlib 后端 |
matplotlib(默认后端)
特点
- pandas 默认后端,无需额外安装。
- 提供完善的静态图像输出(PNG、PDF、SVG 等)。
- 与
plt.subplots()、plt.savefig()等原生 API 无缝协作。 - 适合论文、报告等静态出版级图表。
典型用法
import matplotlib.pyplot as plt
df.plot(kind='line', figsize=(10, 4))
plt.title('默认 matplotlib 后端')
plt.savefig('output.png', dpi=300)
plt.show()相关配置
# 通过 options 调整 matplotlib 行为
pd.set_option('plotting.matplotlib.register_converters', True)注意
- matplotlib 后端下,
plot()返回的是 matplotlibAxes对象。- 交互功能有限(缩放、悬停提示等需手动编码)。
plotly 后端
安装
pip install plotly启用与使用
import pandas as pd
pd.options.plotting.backend = 'plotly'
# 所有 plot 代码无需修改,返回 plotly Figure
fig = df.plot(kind='line', figsize=(10, 4))
fig.show() # 浏览器/Notebook 中交互式展示特点
- 交互式图表:缩放、平移、悬停显示数值、图例开关。
- 支持
scatter、bar、line、area、box、hist、kde等主要图表类型。 - 返回值变为
plotly.graph_objects.Figure,可用fig.update_layout()继续定制。 - 适合数据探索分析与 Web 展示。
常用示例
pd.options.plotting.backend = 'plotly'
# 交互式折线图
df.plot(kind='line', title='交互式折线图')
# 交互式散点图
df.plot(kind='scatter', x='A', y='B', color='C')其他可选后端
| 后端 | 安装命令 | 特点 |
|---|---|---|
| hvplot | pip install hvplot | 基于 HoloViews/Bokeh,大数据交互性能优秀 |
| pandas-bokeh | pip install pandas-bokeh | Bokeh 驱动的简洁交互式图表 |
| plotly | pip install plotly | 交互功能最丰富,广泛用于 Web 端 |
| altair | pip install altair | 声明式统计可视化(需配合 Vega-Lite) |
# 切换到 hvplot 示例
pd.options.plotting.backend = 'hvplot'
df.plot() # 返回 hvplot 图表对象
# 切换到 pandas_bokeh 示例
pd.options.plotting.backend = 'pandas_bokeh'
df.plot()后端兼容性差异
- 不同后端对
kind类型、参数的支持程度不同,切换后需检查参数兼容性。- 例如部分后端不支持
hexbin、table等 matplotlib 专有参数。- 建议以
pd.option_context('plotting.backend', ...)局部切换,隔离影响。
📊 后端对比总结
| 对比维度 | matplotlib | plotly | hvplot |
|---|---|---|---|
| 安装成本 | pandas 内置 | 需 pip 安装 | 需 pip 安装 |
| 交互性 | ❌ 静态 | ✅ 丰富 | ✅ 优秀 |
| 图表类型支持 | ✅ 全部 11 种 | 多数 | 多数 |
| 返回值类型 | matplotlib.Axes | plotly.Figure | hvplot 对象 |
| 适用场景 | 论文/报告出版 | Web 展示/探索 | 大数据交互分析 |
| 自定义扩展 | ✅ 极强(底层 API) | ✅ 通过 update_layout | ✅ 通过 HoloViews |
🔗 相关笔记
- 配置选项:index(
plotting.backend选项) - 核心绘图接口:1. DataFrame.plot 与 Series.plot
- 章节总览:index