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

如何在pandas.melt后添加原列顺序列并用于Seaborn可视化?

给Melt后的DataFrame添加列顺序标记(importance列)并用于Seaborn绘图

我来帮你搞定这个需求,其实关键是先提前定义好颜色的优先级映射,再同步到melt后的数据集里就行,步骤很清晰:

第一步:先确定排序后的列优先级

先把你用来排序列的结果存成变量,方便后续复用:

import pandas as pd
import seaborn as sns

# 你的原始车辆数据DataFrame
df = pd.DataFrame( [{'Orange': 0, 'Green': 2, 'Blue': 1}, {'Orange': 2, 'Green': 4, 'Blue': 4}, {'Orange': 1, 'Green': 3, 'Blue': 10} ])

# 获取按最大值降序排列的颜色列名
sorted_color_cols = df.max().sort_values(ascending=False).index

第二步:创建颜色到importance的映射字典

用枚举方式给每个排序后的颜色分配优先级数值(0代表最高优先级):

color_importance_map = {color: idx for idx, color in enumerate(sorted_color_cols)}
# 这个字典的结果是:{'Blue': 0, 'Green': 1, 'Orange': 2}

第三步:Melt并添加importance列

执行melt操作后,直接用map方法把颜色映射成对应的优先级:

tidy = pd.melt(df.reset_index(), id_vars=['index'], var_name='color', value_name='number')
# 新增importance列
tidy['importance'] = tidy['color'].map(color_importance_map)

这样得到的tidy就完全符合你想要的格式,每个颜色对应的importance值和原排序后的列顺序一致。


结合Seaborn绘图的实用示例

有了importance列,你可以用它来突出高优先级的类别,这里给你几个常见的用法:

1. 让高优先级的线条更粗

把importance反向后作为线条粗细参数,数值越小(优先级越高)的线条越粗:

# 计算线条粗细:优先级最高的Blue用4px,Green用3px,Orange用2px
tidy['line_weight'] = 4 - tidy['importance']

axes = sns.relplot(
    data=tidy,
    x='index',
    y='number',
    hue='color',
    kind="line",
    linewidth=tidy['line_weight']
)

2. 按importance拆分独立图表

如果想把不同优先级的类别分开展示,可以用col参数指定拆分维度:

axes = sns.relplot(
    data=tidy,
    x='index',
    y='number',
    hue='color',
    kind="line",
    col='importance',
    col_wrap=2  # 控制每行显示2个图表
)

3. 用颜色深浅区分优先级

自定义调色板,让高优先级的颜色更醒目:

# 定义从深到浅的调色板,对应importance 0到2
priority_palette = ['#003399', '#006633', '#FF9933']

axes = sns.relplot(
    data=tidy,
    x='index',
    y='number',
    hue='importance',
    palette=priority_palette,
    kind="line"
)

这样就能轻松突出你关注的高数值车辆类别啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:32:47