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 px

app = 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 figure

if __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、交互式报告、数据探索、内部数据工具、客户演示。