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

发布: (2026年1月14日 GMT+8 05:00)
4 min read
原文: Dev.to

Source: Dev.to

封面图片:摆脱 Matplotlib:仅用 3 行代码创建交互式 Python 图表

厌倦了从 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 代理,进行系统学习: 。

Back to Blog

相关文章

阅读更多 »

第39天提升我的数据科学技能

反思:在数据工作中,一种让许多人感到沮丧却鲜少人提及的沉默斗争:“我学到了很多……但一切都显得支离破碎。” 今天……