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

Seaborn热图叠加绘图时Y轴刻度不匹配问题求助

解决Seaborn热图叠加散点/折线图的Y轴刻度不匹配问题

问题根源

Seaborn热图的Y轴默认对应数据框df_11的行索引(通常是0到行数-1的整数序列),而你要叠加的散点、折线图Y值是0.01~0.5的连续数值,两者刻度范围完全不兼容,直接在同一轴绘制会导致数据显示错位。

解决方案:使用双Y轴

通过创建共享X轴的双Y轴,分别对应热图的行索引和拟合数据的Y值,实现两组数据的正确展示。

修改后的完整代码

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(1, 1, figsize=(10, 4))

# 绘制热图,ax对应热图的Y轴(行索引)
sns.heatmap(df_11, annot=False, cmap="Greens", ax=ax)
ax.set_xlabel('G')
ax.set_ylabel('热图行索引')  # 可根据df_11的行含义自定义
ax.set_title('Calibrated Matrix')
ax.invert_yaxis()  # 反转热图Y轴,符合常规阅读顺序

# 创建共享X轴的双Y轴,用于绘制拟合数据
ax2 = ax.twinx()
# 绘制散点图与折线图(修正原代码中y变量为y_fitted)
ax2.scatter(x_fitted, y_fitted, label='Raw data', color='red')
ax2.plot(x_fitted, y_fitted, 'k', label='Fitted curve')
ax2.set_ylabel('G*-G')

# 合并两组图表的图例
lines1, labels1 = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax.legend(lines1 + lines2, labels1 + labels2, loc='upper right')

plt.tight_layout()
plt.show()

额外说明

  • 如果你的热图Y轴并非行索引而是实际数值刻度,可调整热图的yticklabels或直接对齐两组数据的Y轴范围,但双Y轴仍是处理离散/连续数据混合展示的通用方案。
  • 原代码中scatter方法的y变量应为y_fitted(匹配你提供的数据表),已在代码中修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:42