Plotly解决了什么
matplotlib是Python数据可视化的标准库,但样式偏学术、交互性差。Plotly提供交互式、网页级、出版级质量的图表,适合做Dashboard、报告、网页嵌入。本教程带你从基础到高级应用。
第一步:安装与基础
安装:
pip install plotly
最简示例:
import plotly.graph_objects as go
fig = go.Figure(data=go.Scatter(x=[1,2,3,4], y=[10,15,13,17], mode=’lines+markers’))
fig.update_layout(title=’销售趋势’, xaxis_title=’月份’, yaxis_title=’销售额’)
fig.show()
运行后弹出浏览器显示交互式图表,鼠标悬停看数值,可缩放、可保存为图片。
第二步:基础图表类型
Plotly支持丰富的图表类型:
- Scatter——折线图、散点图
- Bar——柱状图、条形图
- Pie——饼图
- Histogram——直方图
- Heatmap——热力图
- Box——箱线图
- Violin——小提琴图
- 3D Scatter——三维散点图
- Map——地图
每种图表用相应的go对象创建,参数丰富,几乎所有视觉细节都可定制。
第三步:交互功能
Plotly的杀手锏是交互性:
- hover提示——鼠标悬停显示精确数值
- 缩放与平移——鼠标框选区域放大
- 图例筛选——点击图例隐藏/显示数据系列
- 导出图片——工具栏下载PNG/SVG/PDF
- 联动——多图联动(选一个图区域,其他图同步缩放)
这些交互功能让数据探索效率提升数倍,发现问题的速度比静态图快得多。
第四步:Dash应用构建
Plotly与Dash结合可构建完整数据分析Web应用:
import dash
from dash import dcc, html
import plotly.express as pxapp = dash.Dash(__name__)
app.layout = html.Div([
html.H1(‘销售Dashboard’),
dcc.Graph(id=’sales-chart’),
dcc.Dropdown(id=’region-filter’, options=[…], value=’全部’)
])@app.callback(…)
def update_chart(region):
# 根据筛选更新图表
return figureif __name__ == ‘__main__’:
app.run_server(debug=True)
Dash让你用纯Python构建带筛选器、图表、表格的完整数据应用,无需HTML/CSS/JavaScript。
第五步:常见场景实战
场景1:销售Dashboard
多图表组合:销售额趋势(折线)+ 区域分布(柱状)+ 产品占比(饼图)+ 客户分布(地图)+ 关键指标卡片(KPI)。所有图表联动筛选。
场景2:用户行为分析
用户留存(漏斗图)+ 行为路径(桑基图)+ 时段分布(热力图)+ 用户分群(散点图)。
场景3:金融分析
K线图(candlestick)+ 成交量(bar)+ 技术指标(折线)+ 资产配置(饼图)。
场景4:科学数据
三维散点图 + 等高线图 + 矢量场图 + 动画图表。
Plotly Express简化版
Plotly还提供Express模块,一行代码生成图表:
import plotly.express as px
fig = px.scatter(df, x=’年龄’, y=’收入’, color=’职业’, size=’消费’, hover_data=[‘姓名’])
fig.show()
参数化程度高,适合快速探索数据。底层仍可访问完整Plotly对象做精细调整。
导出与分享
- 导出HTML——fig.write_html(‘chart.html’),可嵌入网页或邮件
- 导出PNG——fig.write_image(‘chart.png’)(需要kaleido包)
- 导出PDF——同上
- 在线分享——上传到Plotly Chart Studio(付费)
- 嵌入Jupyter——fig.show()直接在Notebook中显示
- 嵌入Web应用——Dash或iframe
Dashboards模板
推荐的开源Dashboard模板:
- Dash官方示例——dash.plotly.com/examples
- Dash Bootstrap Components——bootstrap风格组件
- Dash Mantine Components——现代UI组件
- Plotly Dash Gallery——社区优秀案例
常见问题与误区
- 大数据卡顿——超过10万数据点建议先聚合或采样
- 中文乱码——设置fig.update_layout(font=dict(family=’Microsoft YaHei’))
- 导出图片失败——安装kaleido包(pip install -U kaleido)
- Dash性能——大量回调时考虑clientside callback或缓存
效率数据
实测:交互式销售Dashboard,传统Excel+VBA约3-5天,Plotly+Dash约1-2天。报告中的静态图改成交互式HTML,读者体验提升3-5倍。10万行数据的散点图渲染约2-3秒,性能可接受。适合场景:业务Dashboard、交互式报告、数据探索、内部数据工具、客户演示。