Seaborn heatmap如何从DataFrame中指定x、y轴绘制误差热力图
实现方法
你当前的问题根源是seaborn.heatmap要求输入二维矩阵结构的宽格式DataFrame:行索引对应纵轴标签、列名对应横轴标签,单元格值直接对应热力填充数值。你目前使用的是长格式的三元组表(x坐标、y坐标、误差值),直接传入无法匹配热力图的结构要求,需要先做格式转换。
具体操作步骤
- 用
pivot方法将长表转换为符合要求的宽表 - 可选调整:对y轴排序以符合常规坐标显示逻辑(y值越大位置越靠上)
- 传入转换后的宽表绘制热力图
完整可运行代码
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd # 1. 长表转宽表:index指定纵轴字段,columns指定横轴字段,values指定填充值字段 df_heatmap = df_X.pivot(index='y_position', columns='x_position', values='x_error') # 可选:如果希望y轴数值大的在上(符合常规坐标显示习惯),取消下行注释 # df_heatmap = df_heatmap.sort_index(ascending=False) # 2. 绘制热力图,cmap可根据需求更换配色方案 p1 = sns.heatmap(df_heatmap, annot=True, cmap='viridis') # 补充坐标轴标签 plt.xlabel('x_position') plt.ylabel('y_position') plt.show()
特殊情况处理
如果你的(x,y)组合存在重复值,可先用pivot_table做聚合后再绘图,示例如下:
# 重复坐标的误差值取平均 df_heatmap = df_X.pivot_table(index='y_position', columns='x_position', values='x_error', aggfunc='mean')
内容的提问来源于stack exchange,提问作者the phoenix
相关产品推荐
相关产品推荐

