Plotly从安装到绘制第一个交互图表

80 阅读5分钟

Plotly是Python中功能强大的可视化库,以交互式图表为核心优势,相比Matplotlib、Seaborn等静态可视化工具,它能让读者通过缩放、悬停、筛选等操作探索数据,无需额外前端代码就能生成可网页分享的图表。

一、环境搭建:安装Plotly

Plotly支持Python 3.7及以上版本,推荐使用pipconda安装,核心只需安装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入门关键技巧

  1. 数据格式适配:Plotly优先支持Pandas DataFrame,也可使用列表、字典,但DataFrame更易维护;
  2. 交互细节优化:通过fig.update_traces()调整数据点样式,fig.update_layout()修改图表布局;
  3. 解决中文乱码:指定font={"family": "SimHei"},或在系统中安装对应字体;
  4. Jupyter Notebook使用:在Notebook中运行fig.show()会直接嵌入图表,无需弹出浏览器。