2014-12-30 66 views
2

我必须在图像中显示带有相应标签的混淆矩阵。我正在使用matplotlib。但是当图像被创建时,它只显示替代标签,并且没有显示所有标签。此外,矩阵中的数据与其他网格数据重叠。是应该感谢帮助。matplotlib中图像中标签的问题

labels_x = ['D','F','A','G','DG','R','I','BS','COA','W','T','UserAcc%'] #create labels for each classes 
labels_y = ['D','F','A','G','DG','R','I','BS','COA','W','T','ProdAcc%'] 
# Guassian Confusion Matrix plo 
fig = plt.figure(figsize=(18, 18)) 
ax = fig.add_subplot(111) 
cax = ax.matshow(cm1) 

pl.title('CONFUSION MATRIX(Guassian)') 
for i,j in ((x,y) for x in xrange(len(cm1)) 
     for y in xrange(len(cm1[0]))): 
    ax.annotate(str(cm1[j][i]),xy=(i,j)) 
fig.colorbar(cax) 
ax.set_xticklabels(['']+labels_x) 
ax.set_yticklabels(['']+labels_y) 
plt.ylabel('True label') 
plt.xlabel('Predicted label') 
plt.set_cmap('Pastel1') 
plt.savefig(finaldata_path_plot+"GuassianConfusionMatrix.pdf", format ='pdf') 
plt.show() 
plt.close() 

Confusion matrix image with alternate labels and overlapped data

+0

只需在阅读该文件将完全回答你自己的问题:-) – Skyler

+0

是我知道我在副剧里犯了一些错误,但我无法弄清楚。我会再次看到它。 – Piyush

+0

是的,我得到了..我必须添加set_xtick()和set_ytick() – Piyush

回答

3

默认情况下,matplotlib会自动选择在 “连” 间隔打勾位置。刻度线标签只出现在刻度线位置,所以如果您想标注每一列和每一行,则需要设置刻度线位置以及刻度线标签。

基本上,你想要的东西,如:

i = range(len(labels)) 
ax.set(xticks=i, xticklabels=labels, yticks=i, yticklabels=labels) 

作为一个完整的例子:

import numpy as np 
import matplotlib.pyplot as plt 

labels = ['D', 'F', 'A', 'G', 'DG', 'R', 'I', 'BS', 'COA', 'W', 'T'] 
data = np.random.random((len(labels), len(labels))) 

fig, ax = plt.subplots() 
im = ax.matshow(data, cmap='Pastel1') 
fig.colorbar(im) 

i = range(len(labels)) 
ax.set(xticks=i, xticklabels=labels, yticks=i, yticklabels=labels) 

for (i, j), z in np.ndenumerate(data): 
    ax.text(j, i, '{:0.1f}'.format(z), ha='center', va='center') 

ax.set(ylabel='True label', xlabel='Predicted label', title='Confusion Matrix') 
plt.show() 

enter image description here

+0

非常感谢... – Piyush