写给:想让数据说话、爱玩图表、常在 Jupyter、PyCharm、Dash 中折腾的你。
前言大家好,我是个科研老兵兼数据可视化爱好者,平时折腾 Python 画图,常常被 “怎么把交互式图表塞进报告”、“Jupyter 里点不动图” 这类坑卡住。直到我遇到 Plotly.py,才发现原来可以把 浏览器级的交互 直接搬进 Python 环境,省时省力又炫酷。下面就跟我一起拆开这颗“可视化炸弹”吧!
Plotly.py 是啥?Plotly.py(全称 plotly for Python)是基于 plotly.js 的 Python 包,专注于 交互式、浏览器渲染 的图表。它是 开源(MIT)、声明式 的高层 API,背后依托 30+ 类图形:柱状、折线、散点、热力、3D 表面、金融 K‑线、地图、动画等。
| |
| 交互式 | |
| 浏览器渲染 | 生成 HTML/JS,能在 Notebook、网页、Dash 中直接打开 |
| 多平台 | Jupyter、JupyterLab、VS Code、PyCharm、VS Code Remote、Dash |
| 高层 API | plotly.express(一行代码搞定)plotly.graph_objects(细粒度控制) |
| 静态导出 | 支持 PNG、PDF、SVG(via Kaleido) |
| 地理/3D | |
它解决了哪些痛点?
| | |
| 交互性差、需要额外工具(%matplotlib notebook)才能实现 | |
| | |
| | |
| | |
一句话概括:Plotly.py 让“代码→交互图”只差一步,省去搬砖、复制粘贴、手工调参的苦力活。
安装 & 快速上手
Tip:如果你已经在 Anaconda 环境,建议用 conda 安装,依赖会更稳。
# pip 安装(最常用)pip install plotly# conda 安装(适合 Anaconda 用户)conda install -c conda-forge plotly
可选依赖:
- • Kaleido(静态图导出)
pip install -U kaleido - • Jupyter Widget(在 Notebook 中直接交互)
pip install jupyter anywidget
第一段代码:一行画柱状图
import plotly.express as pxfig = px.bar( x=["A", "B", "C"], y=[12, 7, 15], title="简单柱状图—Plotly 快速上手", labels={"x":"类别", "y":"数值"})fig.show()
运行后会弹出一个交互式窗口,鼠标划过去会显示具体数值,滚轮还能放大缩小。
进阶示例:3D 散点 + 动画
import plotly.express as pximport pandas as pdimport numpy as npdf = pd.DataFrame({"x": np.random.randn(200),"y": np.random.randn(200),"z": np.random.randn(200),"time": np.random.randint(0, 10, 200)})fig = px.scatter_3d(df, x="x", y="y", z="z", color="time", animation_frame="time", title="3D 动画散点图")fig.show()
这段代码直接把时间轴变成动画帧,点在空间里跑,交互感杠杠的。
优缺点全拆解
| |
| 交互体验极佳 | 鼠标悬停、缩放、点击即弹 tooltip,适合演示和探索 |
| 图形种类丰富 | |
| 兼容性强 | Jupyter、Dash、Streamlit、FastAPI、Flask 都能直接嵌入 |
| 易上手 | plotly.express 一行代码搞定,graph_objects 细粒度控制 |
| 可导出静态图 | Kaleido 支持 PNG、PDF、SVG,满足报告需求 |
| 活跃社区 | 官方文档、GitHub Issues、Discord 讨论热闹 |
| |
| 体积偏大 | 生成的 HTML 包含完整的 plotly.js,文件稍显臃肿 |
| 渲染依赖浏览器 | |
| 默认配色偏亮 | |
| 学习曲线 | graph_objects |
小技巧:在生产环境可以把图表导出为 PNG(Kaleido)或使用 fig.to_json() 保存配置,既保留交互,又能低成本部署。
总结
- • Plotly.py 把 浏览器级交互 带进了 Python,解决了传统绘图库交互差、部署麻烦的痛点。
- • 安装 超简单,
pip install plotly 一键搞定;入门 只需要 plotly.express,进阶 用 graph_objects 细粒度控制。 - • 优势:交互炫、图形多、生态好;不足:体积大、默认配色需要调。
- • 适用场景:数据探索、业务看板、科研可视化、Dash Web 应用、教学演示。
如果你还在用 Matplotlib 画静态图,真的可以考虑把 Plotly 加进来,让你的报告、博客、演示瞬间升级为 “点即弹、拖即放、动即看” 的交互体验。
项目地址:https://github.com/plotly/plotly.py