如何调整热力图坐标轴:反转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
相关产品推荐
相关产品推荐

