如何使用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
相关产品推荐
相关产品推荐

