我正在尝试绘制我的预测的混淆矩阵。我的数据是多类(13个不同的标签),因此我使用了热图。如下所示,我的热图看起来还可以,但标签有些位置不对:y轴刻度应该稍微向下移动,x轴刻度应该稍微向右移动。我想将两个轴刻度都移动一点,使它们与每个方格的中心对齐。
我的代码:
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_matrix
和party_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 轴。这样,刻度将会被精确地放置在每个单元格的中心位置上。 - JohanCax = sns.heatmap(..., xticklabels=party_names, yticklabels=party_names)
。 您仍然可以使用plt.xticks(rotation=45)
旋转它们而无需额外的参数。 - JohanC