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

如何为热力图设置自定义坐标轴刻度并反转Y轴顺序?

解决热力图自定义刻度与Y轴反转问题

问题分析

你的代码中直接向sns.heatmap传递xticklabels参数导致刻度与数据列不匹配,引发显示异常。同时Y轴反转的方式不正确,需要调整为更可靠的方法。

修正方案

以下是调整后的完整代码,包含自定义整数刻度设置和Y轴反转:

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

# 假设parameter1、parameter2、alpha_values已定义为numpy数组
# 创建DataFrame并保留两位小数
data = pd.DataFrame({
    r'$a$': np.round(parameter1, 2),
    r'$\mathbb{E}(S)$': np.round(parameter2, 2),
    'alpha_values': alpha_values
})

# 透视成热力图矩阵,并排序索引和列确保顺序正确
heatmap_data = data.pivot(index=r'$a$', columns=r'$\mathbb{E}(S)$', values='alpha_values')
heatmap_data = heatmap_data.sort_index().sort_index(axis=1)  # 关键:确保轴按顺序排列

# 创建自定义渐变色
cmap = mcolors.LinearSegmentedColormap.from_list("gray_scale", ["white", "blue"])

# 绘制热力图(不直接传递刻度标签)
ax = sns.heatmap(heatmap_data, cmap=cmap, annot=False, fmt=".2f", vmin=0, vmax=1)

# 设置X轴整数刻度
xtick_positions = np.arange(len(heatmap_data.columns))
xtick_labels = [int(col) for col in heatmap_data.columns]  # 将列值转为整数
ax.set_xticks(xtick_positions)
ax.set_xticklabels(xtick_labels)

# 反转Y轴并设置整数刻度(最大值在上)
ax.invert_yaxis()
ytick_positions = np.arange(len(heatmap_data.index))
ytick_labels = [int(idx) for idx in heatmap_data.index]  # 将索引值转为整数
ax.set_yticks(ytick_positions)
ax.set_yticklabels(ytick_labels)

# 添加边框
for _, spine in ax.spines.items():
    spine.set_visible(True)
    spine.set_linewidth(1)

plt.show()

关键调整点

  • 排序透视矩阵:添加sort_index()确保X/Y轴按数值顺序排列,避免刻度混乱。
  • 后设置刻度:不在heatmap函数中传递刻度标签,而是通过set_xticks/set_yticks手动绑定位置与标签,保证对齐。
  • Y轴反转:使用ax.invert_yaxis()直接反转轴方向,比手动反转标签更可靠,确保最大值显示在顶部。
  • 整数刻度转换:将透视后的列/索引值转为整数,满足你需要的坐标轴显示格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:21:06