本节说明

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
2pandas 查找包名对应的 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() 返回的是 matplotlib Axes 对象。
  • 交互功能有限(缩放、悬停提示等需手动编码)。

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')

其他可选后端

后端安装命令特点
hvplotpip install hvplot基于 HoloViews/Bokeh,大数据交互性能优秀
pandas-bokehpip install pandas-bokehBokeh 驱动的简洁交互式图表
plotlypip install plotly交互功能最丰富,广泛用于 Web 端
altairpip 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', ...) 局部切换,隔离影响。

📊 后端对比总结

对比维度matplotlibplotlyhvplot
安装成本pandas 内置需 pip 安装需 pip 安装
交互性❌ 静态✅ 丰富✅ 优秀
图表类型支持✅ 全部 11 种多数多数
返回值类型matplotlib.Axesplotly.Figurehvplot 对象
适用场景论文/报告出版Web 展示/探索大数据交互分析
自定义扩展✅ 极强(底层 API)✅ 通过 update_layout✅ 通过 HoloViews

🔗 相关笔记