Seaborn热力图y轴刻度标签被截断,调整后旋转重叠求助
Seaborn热力图y轴长标签问题解决
核心调整方案
针对长y轴标签被截断、调整画布后标签旋转重叠且rotation参数失效的问题,可通过以下代码修改解决:
修改后的完整代码
import seaborn as sns import matplotlib.pyplot as plt seasons = ['yearly','djf','mam','jja','son'] # 根据模型数量动态设置画布高度,每个标签分配0.8英寸(可按需调整) fig_width = 8 fig_height = 0.8 * len(model_list) for season_index, season in enumerate(seasons): # 提前创建画布并指定尺寸 plt.figure(figsize=(fig_width, fig_height)) im = sns.heatmap(bias[:, season_index, :], linewidth=0.5, cmap='coolwarm', annot=True, annot_kws={'fontsize':7, 'fontweight':'bold'}) # 设置x轴刻度标签 im.set_xticklabels(['1','2','3','4','5','6','7','8','9']) # 设置y轴刻度标签,调整字体大小避免重叠 im.set_yticklabels(model_list, fontsize=8) # 强制重置y轴标签旋转角度(绕过Seaborn默认行为) plt.setp(im.get_yticklabels(), rotation=0) # 调整左侧边距,给长标签留出足够显示空间 plt.subplots_adjust(left=0.3) # 保存时添加bbox_inches='tight',确保标签不被截断 plt.savefig(f"figures/bias/yearly_bias_{season}.png", bbox_inches='tight') plt.close()
关键调整说明
- 动态画布尺寸:根据
model_list的长度计算画布高度,避免标签垂直方向重叠 - 强制旋转控制:使用
plt.setp()直接操作y轴标签对象,解决set_yticklabels的rotation参数失效问题 - 边距与保存优化:通过
subplots_adjust预留左侧空间,配合bbox_inches='tight'确保保存的图片完整显示所有标签 - 字体大小适配:缩小y轴标签字体,进一步缓解长标签的重叠问题
内容的提问来源于stack exchange,提问作者Thomas Kroißenbrunner
相关产品推荐
相关产品推荐

