Plotly是Python中功能强大的可视化库,以交互式图表为核心优势,相比Matplotlib、Seaborn等静态可视化工具,它能让读者通过缩放、悬停、筛选等操作探索数据,无需额外前端代码就能生成可网页分享的图表。
一、环境搭建:安装Plotly
Plotly支持Python 3.7及以上版本,推荐使用pip或conda安装,核心只需安装plotly库,若需结合Pandas处理数据,需提前安装pandas。
1. pip安装(通用方式)
打开命令行终端,执行以下命令:
# 安装核心Plotly库
pip install plotly==5.18.0 # 指定稳定版本,避免版本兼容问题
# 安装Pandas(用于数据处理,可选但推荐)
pip install pandas
2. conda安装(Anaconda环境)
若使用Anaconda/Miniconda,执行:
conda install -c plotly plotly=5.18.0
conda install pandas
安装完成后,在Python环境中执行import plotly无报错,即说明安装成功。
二、Plotly核心绘图方式
Plotly提供两种主要绘图接口,新手优先从**Plotly Express(px)入手,它是高层封装接口,代码简洁、易上手;若需高度自定义图表,再使用Graph Objects(go)**底层接口。
| 绘图接口 | 特点 | 适用场景 |
|---|---|---|
| Plotly Express (px) | 一行代码生成图表,自动处理数据映射 | 快速绘制常规图表(折线、柱状、散点等) |
| Graph Objects (go) | 手动配置图表元素,灵活性高 | 定制化复杂图表(多子图、特殊样式) |
三、第一个Plotly图表:折线图
折线图是展示数据趋势的基础图表,以“月度销量趋势”为例,用Plotly Express快速实现。
1. 准备数据
先用Pandas创建模拟的月度销量数据:
import pandas as pd
# 构建数据:月份+销量
data = pd.DataFrame({
"月份": ["1月", "2月", "3月", "4月", "5月", "6月"],
"销量": [120, 150, 90, 200, 180, 250]
})
2. 绘制基础折线图
import plotly.express as px
# 用Plotly Express绘制折线图
fig = px.line(
data, # 数据源
x="月份", # x轴对应数据列
y="销量", # y轴对应数据列
title="2025年上半年产品销量趋势" # 图表标题
)
# 显示图表(在Jupyter Notebook/本地Python环境中直接运行)
fig.show()
运行代码后,会自动弹出浏览器窗口展示交互图表,支持以下操作:
- 悬停:鼠标移到数据点,显示具体月份和销量;
- 缩放:拖动鼠标框选区域,放大查看细节;
- 下载:点击右上角相机图标,导出PNG图片;
- 平移:按住鼠标左键拖动,查看不同区域。
3. 简单优化:添加标记点+自定义颜色
fig = px.line(
data,
x="月份",
y="销量",
title="2025年上半年产品销量趋势",
markers=True, # 显示数据标记点
color_discrete_sequence=["#E63946"] # 自定义折线颜色
)
# 调整轴标签样式
fig.update_layout(
xaxis_title="月份",
yaxis_title="销量(件)",
font={"family": "SimHei", "size": 12} # 设置字体,解决中文乱码
)
fig.show()
小贴士:若图表中中文显示为方框,需指定支持中文的字体(如SimHei、Microsoft YaHei)。
四、基础图表实战:柱状图与散点图
掌握折线图后,再学习两种高频使用的基础图表,核心语法与折线图一致,仅需更换px.bar()(柱状图)、px.scatter()(散点图)方法。
1. 柱状图:对比不同产品销量
场景:对比3款产品上半年总销量,用柱状图直观展示差异。
# 准备数据
product_data = pd.DataFrame({
"产品": ["产品A", "产品B", "产品C"],
"总销量": [850, 1200, 680],
"品类": ["电子产品", "日用品", "电子产品"]
})
# 绘制分组柱状图(按品类着色)
fig = px.bar(
product_data,
x="产品",
y="总销量",
color="品类", # 按品类区分颜色
barmode="group", # 分组显示(默认堆叠stack)
title="2025年上半年产品销量对比",
text="总销量" # 在柱子上显示数值
)
fig.show()
2. 散点图:分析数据相关性
场景:分析广告投入与产品销量的相关性,用散点图展示变量关系。
# 准备模拟数据
ad_data = pd.DataFrame({
"广告投入(万元)": [5, 8, 10, 12, 15, 18, 20],
"销量(千件)": [8, 12, 15, 16, 20, 22, 25]
})
# 绘制散点图
fig = px.scatter(
ad_data,
x="广告投入(万元)",
y="销量(千件)",
title="广告投入与销量相关性分析",
size="销量(千件)", # 用销量大小标记点的尺寸
hover_name="广告投入(万元)" # 悬停显示广告投入
)
# 添加趋势线(线性回归)
fig.add_trendline(method="ols") # 需要安装statsmodels:pip install statsmodels
fig.show()
五、图表的保存与分享
Plotly绘制的交互图表可保存为HTML、图片(PNG/JPG)、PDF等格式,方便分享和嵌入网页。
1. 保存为HTML(推荐,保留交互性)
# 保存折线图为HTML文件
fig.write_html("销量趋势图.html")
双击生成的HTML文件,可在任意浏览器中打开并交互,无需依赖Python环境。
2. 保存为图片
# 保存为PNG图片
fig.write_image("销量趋势图.png", width=800, height=500)
# 保存为PDF
fig.write_image("销量趋势图.pdf")
注意:保存图片需安装kaleido库,执行pip install kaleido即可。
六、Plotly入门关键技巧
- 数据格式适配:Plotly优先支持Pandas DataFrame,也可使用列表、字典,但DataFrame更易维护;
- 交互细节优化:通过
fig.update_traces()调整数据点样式,fig.update_layout()修改图表布局; - 解决中文乱码:指定
font={"family": "SimHei"},或在系统中安装对应字体; - Jupyter Notebook使用:在Notebook中运行
fig.show()会直接嵌入图表,无需弹出浏览器。