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

基于多级索引Pandas DataFrame绘制多条折线图及情绪趋势展示问题

实现方案

1. 数据预处理:转换为长格式

你当前的多级索引DataFrame首先需要做结构转换,方便plotly识别维度字段:

import pandas as pd
import plotly.express as px

# 先把多级行索引转为普通列
df = df.reset_index()
# 重塑为长表:id_vars保留索引维度,其余字段转为「情绪指标-得分」的键值对结构
df_long = df.melt(
    id_vars = ["年份", "CES调查名称"],
    var_name = "情绪指标",
    value_name = "对应得分"
)

2. 优化后的可视化方案

方案A:按年份分面,解决原分面不清晰问题

针对你之前用facet_cols的问题,增加布局调整参数即可大幅提升可读性:

fig = px.line(
    df_long,
    x = "CES调查名称",
    y = "对应得分",
    color = "情绪指标",
    facet_col = "年份",
    facet_col_wrap = 2, # 每行最多放2个子图,避免横向过挤
    markers = True, # 增加数据点标记,避免折线波动无参考
    line_shape = "linear" # 不需要平滑就用linear,需要平滑换spline
)
# 调整坐标轴避免标签重叠
fig.update_xaxes(tickangle = 45)
fig.update_layout(
    height = 600, # 手动设置画布高度
    margin = dict(b = 100) # 底部留空放置倾斜的x轴标签
)
fig.show()

方案B:按情绪指标分面,单独查看各维度趋势

如果你更关注每个情绪指标本身的历年变化,可以调整分面维度:

fig = px.line(
    df_long,
    x = "CES调查名称",
    y = "对应得分",
    color = "年份",
    facet_col = "情绪指标",
    facet_col_wrap = 3,
    markers = True,
    # 如果不同情绪指标得分范围差异大,可打开下面参数让y轴自适应
    # facet_y_scaling = "independent"
)
fig.update_xaxes(tickangle = 45)
fig.update_layout(height = 800)
fig.show()

额外优化技巧

  • 如果CES调查名称有时间先后顺序,可提前对CES调查名称列做排序,保证x轴逻辑连贯
  • 情绪指标数量过多的话,可先筛选需要展示的指标再绘图,避免线条太多混淆
  • 需要导出静态图的话,可以用fig.write_image("趋势图.png", scale=2)导出高分辨率版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:09:03