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

如何基于分类列创建子图并利用颜色映射区分线条?

双分组子图可视化修复方案

原尝试的子图代码存在布局逻辑错误、分组绘制逻辑缺失、X轴刻度未配置、颜色映射未应用等问题,以下是修正后的完整实现方案:

修正后的完整代码

import matplotlib.pyplot as plt
import numpy as np

cluster_filter = 1
tfo_filtered_cluster_df = tfo_labeled_df[tfo_labeled_df['CLUSTER_ID'] == cluster_filter]

# 复用去重图例函数,避免重复标签
def legend_without_duplicate_labels(ax):
    handles, labels = ax.get_legend_handles_labels()
    unique = [(h, l) for i, (h, l) in enumerate(zip(handles, labels)) if l not in labels[:i]]
    ax.legend(*zip(*unique), bbox_to_anchor=(1.05, 1), loc='upper left')

# 创建1行2列的统一画布,适配两个分组维度
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(40, 20), layout='constrained')
x_vars = tfo_filtered_cluster_df.columns[5:]  # 获取96个变量列
x_ticks = range(len(x_vars))

# --------------------------
# 第一个子图:按YEAR_SEASON分组可视化
# --------------------------
group_season = tfo_filtered_cluster_df.groupby(['YEAR_SEASON'])
season_unique = tfo_filtered_cluster_df['YEAR_SEASON'].unique()
color_map_season = plt.cm.get_cmap('Paired', len(season_unique))
color_dict_season = dict(zip(season_unique, color_map_season(np.arange(len(season_unique)))))

for name, group in group_season:
    y_data = group.loc[:, x_vars].T
    ax1.plot(x_ticks, y_data, label=name, color=color_dict_season[name])

ax1.set_title('按 YEAR_SEASON 分组', fontsize=18)
ax1.set_xticks(x_ticks)
ax1.set_xticklabels(x_vars, rotation=90)
ax1.tick_params(axis='x', labelsize=12)
legend_without_duplicate_labels(ax1)

# --------------------------
# 第二个子图:按MEASURE_DAY分组可视化
# --------------------------
group_day = tfo_filtered_cluster_df.groupby(['MEASURE_DAY'])
day_unique = tfo_filtered_cluster_df['MEASURE_DAY'].unique()
color_map_day = plt.cm.get_cmap('tab20', len(day_unique))  # 适配较多分组数量的颜色映射
color_dict_day = dict(zip(day_unique, color_map_day(np.arange(len(day_unique)))))

for name, group in group_day:
    y_data = group.loc[:, x_vars].T
    ax2.plot(x_ticks, y_data, label=name, color=color_dict_day[name])

ax2.set_title('按 MEASURE_DAY 分组', fontsize=18)
ax2.set_xticks(x_ticks)
ax2.set_xticklabels(x_vars, rotation=90)
ax2.tick_params(axis='x', labelsize=12)
legend_without_duplicate_labels(ax2)

# 设置总标题,明确对应Cluster
fig.suptitle(f'Cluster {cluster_filter+1} 双维度分组可视化', fontsize=20, y=1.02)

plt.show()

关键修正说明

  • 布局优化:直接创建1行2列的子图,避免循环创建子图的布局混乱问题
  • 颜色映射应用:为两个分组分别生成独立的颜色字典,YEAR_SEASON用Paired,MEASURE_DAY用tab20(适配更多分组数量),确保同分组线条颜色统一
  • X轴修复:明确设置X轴刻度为变量列索引,添加变量标签并旋转90度,同时调整刻度字号提升可读性
  • 分组绘制逻辑:按目标分组(YEAR_SEASON/MEASURE_DAY)遍历数据,每个分组下的所有样本用对应颜色绘制,解决线条显示异常问题
  • 图例优化:复用去重图例函数,并将图例放在子图外侧,避免遮挡线条内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:49:52