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

Seaborn lineplot如何拆分hue所用列名生成双维度组合图例

实现方案

Seaborn 绘图默认更适配长表(Tidy Data)结构,你只需要先把原始宽表重塑为长格式,拆分列名得到两个分组维度,再传入绘图参数即可,图例会自动生成对应拆分字段的组合标识。


步骤1:重塑数据拆分列名

先通过melt把宽表转成长表,再按下划线拆分原始列名,生成两个独立的分组字段,同时补充x轴对应的序列索引:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 原始示例数据
df = pd.DataFrame(np.array([[1, 2, 3, 4], [4, 5, 6, 4], [7, 8, 9, 4]]),
                   columns=['NP_A', 'NP_B', 'NP_C', "OP_A"])

# 宽表转长表
df_long = df.melt(var_name='origin_col', value_name='val')
# 按下划线拆分列名,得到两个分组维度
df_long[['main_type', 'sub_type']] = df_long['origin_col'].str.split('_', expand=True)
# 生成x轴位置索引,对应原始数据的行号
df_long['x_axis'] = df_long.groupby('origin_col').cumcount()

步骤2:调用lineplot绘图

你可以选择两种图例展示方式:

方式1:双维度区分(颜色+线型)

把拆分后的两个字段分别传给hue(颜色分组)和style(线型分组),同属一类主分组的折线颜色一致,同属一类子分组的折线线型一致,组合区分所有系列:

sns.lineplot(
    data=df_long,
    x='x_axis',
    y='val',
    hue='main_type',
    style='sub_type',
    markers=True,
    dashes=True
)
plt.legend(title='分组组合')
plt.show()

方式2:单维度合并分组

如果希望图例直接展示拆分后两个字段的组合值,可以把两个字段拼接成新的分组列,直接传给hue参数:

df_long['combine_type'] = df_long['main_type'] + '-' + df_long['sub_type']
sns.lineplot(
    data=df_long,
    x='x_axis',
    y='val',
    hue='combine_type',
    marker='o'
)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:03:21