抛弃 Matplotlib:用 3 行代码创建交互式 Python 图表
Source: Dev.to

厌倦了从 Matplotlib 导出静态 PNG 吗?你的用户期待更多——他们想要悬停、缩放、探索数据。下面教你如何使用 Plotly Express 在没有冗余代码的情况下满足他们的需求。这是从 Pandas DataFrame 到完整交互式、基于浏览器的图表的最快方式。
代码优先的做法
不需要冗长的介绍。直接看代码。它会创建一个交互式柱状图,并直接在浏览器中打开。
import pandas as pd
import plotly.express as px
from plotly.offline import plot
# 1. 你的数据
df = pd.DataFrame({
'Quarter': ['Q1 2024', 'Q2 2024', 'Q3 2024', 'Q4 2024'],
'Revenue': [100, 150, 130, 180]
})
# 2. 魔法单行代码
fig_px = px.bar(
df,
x='Quarter',
y='Revenue',
title='Quarterly Revenue (Plotly Express)',
color='Quarter',
template='plotly_dark'
)
# 3. 保存并打开 HTML 文件
plot(fig_px, filename='interactive_chart.html', auto_open=True)
运行它。一个 HTML 文件会在浏览器中弹出,支持悬停显示提示、点击拖拽缩放以及使用内置工具栏。所有这些都是默认行为——仅用三行 Python 代码就能得到一个小型数据应用。
Plotly 的两种风格
你刚才使用的是 Plotly Express (PX),这是一个用于快速完成任务的高级 API,适合探索和快速报告。
另一种是 Plotly Graph Objects (GO),这是一个低级、功能强大的 API,提供完整的控制权。代码会更冗长,因为你需要一步步构建图表。
下面是使用 Graph Objects 构建同样图表的代码:
import plotly.graph_objects as go
# A. 从空画布开始
fig_go = go.Figure()
# B. 添加数据系列(“trace”)
fig_go.add_trace(
go.Bar(x=df['Quarter'], y=df['Revenue'], name='Revenue Trace')
)
# C. 更新样式(“layout”)
fig_go.update_layout(
title_text='Quarterly Revenue (Graph Objects)',
xaxis_title='Fiscal Quarter',
yaxis_title='Total Revenue ($K)',
template='plotly_dark'
)
# 你可以用 plot(fig_go, ...) 同样保存
正如你所见,px.bar() 本质上是一个智能包装器,帮你完成创建 trace 和布局的所有工作。
何时使用 PX 与 GO
| 场景 | 使用 Plotly Express (PX) | 使用 Plotly Graph Objects (GO) |
|---|---|---|
| 目标 | 探索性数据分析 (EDA) | 生产环境仪表盘 |
| 速度 | 快速迭代 | 需要对每个元素进行细粒度控制 |
| 图表类型 | 标准图表(柱状图、散点图、折线图) | 组合图表(例如柱状图和折线图混合) |
| 定制程度 | 用最少代码快速生成交互式图表 | 自定义注释、形状或按钮等高级功能 |
专业提示: 最佳工作流往往是混合使用。先用 Plotly Express 快速生成基础图形,然后通过 fig.update_layout() 或 fig.add_trace() 添加自定义的细节。
本文基于我的电子书《Data Science & Analytics with Python Programming》第 15 章的概念构建——你可以在此处找到它: 。
探索完整的 “Python Programming Series”,从 Python 基础到高级 AI 代理,进行系统学习: 。