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
相关产品推荐
相关产品推荐

