热力图中基于分类数据的刻度位置(seaborn)

3
我正在尝试绘制我的预测的混淆矩阵。我的数据是多类(13个不同的标签),因此我使用了热图。如下所示,我的热图看起来还可以,但标签有些位置不对:y轴刻度应该稍微向下移动,x轴刻度应该稍微向右移动。我想将两个轴刻度都移动一点,使它们与每个方格的中心对齐。

My Confusion Matrix

我的代码:

sns.set()
my_mask = np.zeros((con_matrix.shape[0], con_matrix.shape[0]), dtype=int)
for i in range(con_matrix.shape[0]):
    for j in range(con_matrix.shape[0]):
        my_mask[i][j] = con_matrix[i][j] == 0 

fig_dims = (10, 10)
plt.subplots(figsize=fig_dims)
ax = sns.heatmap(con_matrix, annot=True, fmt="d", linewidths=.5, cmap="Pastel1", cbar=False, mask=my_mask, vmax=15)
plt.xticks(range(len(party_names)), party_names, rotation=45)
plt.yticks(range(len(party_names)), party_names, rotation='horizontal')
plt.show()

为了复制,这里有硬编码的con_matrixparty_names

import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns 

con_matrix = np.array([[55, 0, 0, 0,0, 0, 0,0,0,0,0,0,2], [0,199,0,0,0,0,0,0,0,0,2,0,1],
 [0, 0,52,0,0,0,0,0,0,0,0,0,1],
 [0,0,0,39,0,0,0,0,0,0,0,0,0],
 [0,0,0,0,90,0,0,0,0,0,0,4,3],
 [0,0,0,1,0,35,0,0,0,0,0,0,0],
 [0,0,0,0,5,0,26,0,0,1,0,1,0],
 [0,5,0,0,0,1,0,44,0,0,3,0,1],
 [0,1,0,0,0,0,0,0,52,0,0,0,0],
 [0,1,0,0,2,0,0,0,0,235,0,1,1],
 [1,2,0,0,0,0,0,3,0,0,34,0,3],
 [0,0,0,0,5,0,0,0,0,1,0,40,0],
 [0,0,0,0,0,0,0,0,0,1,0,0,46]])

party_names = ['Blues', 'Browns', 'Greens', 'Greys', 'Khakis', 'Oranges', 'Pinks', 'Purples', 'Reds', 'Turquoises', 'Violets', 'Whites', 'Yellows']

我已经尝试使用不同轴的position参数,但效果不佳。在这个网站上也没有找到确切的答案(至少对于分类数据没有可行的解决方案)。

我是seaborn可视化方面的新手,希望能得到更好的解释和改进(不仅针对我的问题,还包括我的代码和可视化方面)。


只需使用 plt.xticks(np.arange(0.5, len(party_names)), ... 以及类似的方式来设置 y 轴。这样,刻度将会被精确地放置在每个单元格的中心位置上。 - JohanC
注意,您也可以直接添加刻度标签:ax = sns.heatmap(..., xticklabels=party_names, yticklabels=party_names)。 您仍然可以使用 plt.xticks(rotation=45) 旋转它们而无需额外的参数。 - JohanC
1个回答

1
你可以将刻度标签整体向右偏移0.5以达到期望的对齐效果。为此,我使用了NumPy的arange函数,它可以使整个数组向量化加上0.5。
plt.xticks(np.arange(len(party_names))+0.5, party_names, rotation=45)
plt.yticks(np.arange(len(party_names))+0.5, party_names, rotation='horizontal')

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接