2014-12-30 113 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