如何在Plotly折线图中将DataFrame行设置为X轴
问题原因
空白图和px.line()的参数组合没关系,核心问题是你传入的DataFrame结构不符合要求。你从Excel读入的是交叉宽表:第一行存月份、第一列存成员名,统计值存在行列交叉的单元格里。px.line()只能识别列维度的字段,无法直接把某一行数据映射为X轴,你之前传df.columns当Y轴更是会把所有列当成独立绘图指标,自然渲染不出有效内容。
解决方法
核心是先把宽表转成Plotly支持的长表(每一列对应一个独立字段),再传参绘图,全程不需要用iloc硬索引行数据。
完整可运行代码
import pandas as pd import plotly.express as px # --- 第一步:清洗原始读入的Excel数据 --- # 提取第一行存储的月份值 month_values = df.iloc[0, 1:].tolist() # 移除存月份的第一行,重置索引 df = df.iloc[1:].reset_index(drop=True) # 重命名列:第一列为成员名,后续列对应提取到的月份 df.columns = ["Team_Member"] + month_values # --- 第二步:宽表转长表(核心操作) --- df_long = df.melt( id_vars="Team_Member", var_name="Month", value_name="Daily_Work_Hours" ) # 把数值列转为数字类型,避免Excel读入为字符串导致绘图异常 df_long["Daily_Work_Hours"] = pd.to_numeric(df_long["Daily_Work_Hours"]) # 可选:如果需要X轴月份按时间顺序排列,执行下面这行 # df_long["Month"] = pd.to_datetime(df_long["Month"]) # --- 第三步:绘图,直接传列名即可 --- fig = px.line( df_long, x="Month", y="Daily_Work_Hours", color="Team_Member", title="团队成员月均日均工时趋势", markers=True ) fig.show()
注意事项
px.line()的x/y/color参数仅支持两类输入:DataFrame的列名字符串,或与DataFrame长度一致的数组,无法直接识别行维度的切片数据,不要尝试给x传iloc取的行对象。- 转长表后三个字段直接对应绘图需求:
Team_Member:传入color参数,自动按团队成员名分色绘制独立折线Month:传入x参数作为X轴Daily_Work_Hours:传入y参数作为Y轴数值
内容的提问来源于stack exchange,提问作者Benjamin Peinhardt
相关产品推荐
相关产品推荐

