You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Plotly Express在对应分类线上绘制散点数据点

问题解答

这个需求完全可以通过Plotly Express实现,不需要更换其他绘图工具,具体实现步骤如下:

第一步:数据格式转换

Plotly Express 要求输入的数据集为长表结构,你当前存储的字典是宽格式,需要先做一次转换,提取人员姓名、匹配对应的每条工时记录。
示例转换代码:

import pandas as pd
import plotly.express as px

# 原始工时数据
time_sheet = {"hours_dan":[10, 8, 8, 11], "hours_john":[9, 8, 11], "hours_alex":[10, 8]}

# 转为长表DataFrame
record_list = []
for col_name, hours in time_sheet.items():
    # 从键名中提取人员姓名
    staff_name = col_name.replace("hours_", "")
    for hour_val in hours:
        record_list.append({
            "staff_name": staff_name,
            "work_hour": hour_val
        })
df = pd.DataFrame(record_list)

转换完成后的数据表每一行对应一条单人工时记录,符合绘图输入要求。

第二步:绘图实现

直接调用px.scatter绘制散点即可,默认生成的图表里,同一名人员的所有散点会自动对齐到y轴同一水平位置;如果想要更清晰的水平线效果,可以额外添加对应参考线,代码如下:

# 绘制散点
fig = px.scatter(
    df,
    x="work_hour",
    y="staff_name",
    color="staff_name",
    width=800,
    height=400,
    title="员工工时分布",
    size_max=12
)

# 可选:为每个人员添加同色水平参考线,强化视觉效果
for y_pos, name in enumerate(df["staff_name"].unique()):
    trace_color = fig.data[y_pos].marker.color
    fig.add_hline(y=y_pos, line_width=1.5, line_color=trace_color, opacity=0.6)

# 渲染图表
fig.show()

运行后输出的图表完全匹配需求:y轴为人员姓名,x轴为工时数值,每个人员对应一条水平直线,直线上标注该人员所有的工时数据点,不同人员用颜色区分,还支持悬停查看具体数值、缩放等交互操作。

备选工具说明

如果你需要静态图输出,也可以用Seaborn搭配Matplotlib实现相同效果,但从交互性和代码简洁度来看,Plotly Express是更适配这个需求的选择。

内容的提问来源于stack exchange,提问作者Danny Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:57:19