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

如何调整热力图坐标轴:反转Y轴与移除刻度小数格式

解决热力图的Y轴反转与整数刻度问题

我来帮你搞定这两个调整需求!你的现有代码已经能正常生成热力图,只需要在绘制后添加几行针对性的设置,就能完美解决Y轴反转和刻度格式的问题,而且不会导致图形变形。

修改后的完整代码

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

# 读取数据部分保持不变
with open("1.txt") as f:
    lstx = [int(x) for x in f.read().split()]
with open("2.txt") as f:
    lsty = [int(x) for x in f.read().split()]
with open("3.txt") as f:
    lstz = [float(x) for x in f.read().split()]

x=np.array(lstx)
y=np.array(lsty)
z=np.array(lstz)

df = pd.DataFrame.from_dict(np.array([y,x,z]).T)
df.columns = ['X_value','Y_value','Z_value']
df['Z_value'] = pd.to_numeric(df['Z_value'])

pivotted= df.pivot('Y_value','X_value','Z_value')

# 绘制热力图并获取轴对象
ax = sns.heatmap(pivotted, cmap='Paired')

# 1. 反转Y轴,让45在顶部、1在底部
ax.invert_yaxis()

# 2. 将X、Y轴刻度改为整数格式
# 处理X轴刻度
xticks = ax.get_xticks()
ax.set_xticklabels([int(tick) for tick in xticks])
# 处理Y轴刻度
yticks = ax.get_yticks()
ax.set_yticklabels([int(tick) for tick in yticks])

plt.show()

关键修改点解释

  • 反转Y轴:直接调用ax.invert_yaxis(),这是matplotlib轴对象的原生方法,只会反转轴的显示方向,不会改变热力图的布局和数据对应关系,完全避免了用ylim调整范围导致的变形问题。
  • 整数刻度设置:通过get_xticks()和get_yticks()获取当前轴的刻度值,再将每个刻度值转换为整数后用set_xticklabels()/set_yticklabels()重新设置。这样既保留了原有的刻度位置,又把显示格式从1.0改成了1,完美匹配你的需求。

另外,这里有个可选的优化点:在创建DataFrame时直接指定列的整数类型,能从源头减少刻度显示为小数的概率:

df = pd.DataFrame({
    'X_value': x.astype(int),
    'Y_value': y.astype(int),
    'Z_value': z.astype(float)
})

不过上面的刻度转换代码已经能处理这个问题,所以这一步属于锦上添花的操作。

内容的提问来源于stack exchange,提问作者Thérèse Hernandez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:40