Python 如何向通过Seaborn热图渲染的混淆矩阵添加工具提示?

Python 如何向通过Seaborn热图渲染的混淆矩阵添加工具提示?,python,matplotlib,confusion-matrix,Python,Matplotlib,Confusion Matrix,如何使mat plot lib交互?例如,当我将鼠标悬停在混淆矩阵的每个单元格上时,我希望显示该预测的实例 confusion_mat_df = pd.DataFrame(confusion_mat,columns = pred_spectrum, index = actual_spectrum) plt.figure(figsize=(7,5)) # width,height sns.heatmap(confusion_mat_df, annot=True) 下面是一个示例,说明如何使用s

如何使mat plot lib交互?例如,当我将鼠标悬停在混淆矩阵的每个单元格上时,我希望显示该预测的实例

confusion_mat_df = pd.DataFrame(confusion_mat,columns = pred_spectrum, index = actual_spectrum)

plt.figure(figsize=(7,5)) # width,height
sns.heatmap(confusion_mat_df, annot=True)

下面是一个示例,说明如何使用sklearn混淆矩阵

不幸的是,mplcursors不适用于seaborn热图。Seaborn对热图使用
QuadMesh
,该热图不支持必要的设置

在下面的代码中,我在单元格的中心添加了信心,类似于seaborn的。我还改变了文字和箭头的颜色,以便于阅读。您需要根据自己的情况调整颜色和尺寸

从sklearn.metrics导入混淆矩阵
从matplotlib导入pyplot作为plt
导入MPLS游标
y_true=[“猫”、“蚂蚁”、“猫”、“猫”、“蚂蚁”、“鸟”、“狗”]
y_pred=[“蚂蚁”、“蚂蚁”、“猫”、“猫”、“蚂蚁”、“猫”、“狗”]
标签=[“蚂蚁”、“鸟”、“猫”、“狗”]
混淆矩阵=混淆矩阵(y为真,y为pred,标签=标签)
图,ax=plt.子批次()
热图=plt.imshow(混乱,cmap=“jet”,插值=”最近的“)
对于范围内的x(透镜(标签)):
对于范围内的y(透镜(标签)):
ax.注释(str(x)[y]),xy=(y,x),
ha='center',va='center',fontsize=18,color='white')
plt.colorbar(热图)
plt.xticks(范围(透镜(标签)),标签)
plt.yticks(范围(透镜(标签)),标签)
plt.ylabel(“预测值”)
plt.xlabel(“实际值”)
cursor=mplcursors.cursor(热图,悬停=True)
@cursor.connect(“添加”)
添加上的def(选择):
i、 j=sel.target.index
sel.annotation.set_text(f'{labels[i]}-{labels[j]}:{mission_mat[i,j]}')
选择注释。设置字体大小(12)
sel.annotation.get_bbox_patch().set(fc=“papayawhip”,alpha=0.9,ec='white')
sel.annotation.arrow\u patch.set\u color('白色')
plt.show()

注释可以是多行的,例如:

sel.annotation.set_text(f'Predicted:{labels[i]}\n实际:{labels[j]}\n{mission_mat[i,j]:5})

看一看,文档中包含了很多示例,可能会有所帮助。是的,我想使用这些工具,但我还不知道如何将它们实现到SKX中。我在问题中更新了SKX,我实际上转换为df,然后用sns绘图。有什么建议吗?谢谢精彩的!非常感谢!事实是,在我的例子中,我将conf矩阵转换为df,然后用sns绘制。现在,我想在每次单击单元格时打开一个json文件。那么,如果我首先将conf矩阵转换为df,我该怎么做呢?也许你可以只写
混淆df[i][j]
而不是
混淆mat[i,j]
。但它似乎更容易保持您原来的混淆矩阵,因为它是一个更紧凑的格式。