2010-05-24 6 views
10

Je comploter une matrice de confusion avec matplotlib avec le code suivant:matrice de confusion avec nombre d'instances classées/mal classés sur elle (Python/Matplotlib)

from numpy import * 
import matplotlib.pyplot as plt 
from pylab import * 

conf_arr = [[33,2,0,0,0,0,0,0,0,1,3], [3,31,0,0,0,0,0,0,0,0,0], [0,4,41,0,0,0,0,0,0,0,1], [0,1,0,30,0,6,0,0,0,0,1], [0,0,0,0,38,10,0,0,0,0,0], [0,0,0,3,1,39,0,0,0,0,4], [0,2,2,0,4,1,31,0,0,0,2], [0,1,0,0,0,0,0,36,0,2,0], [0,0,0,0,0,0,1,5,37,5,1], [3,0,0,0,0,0,0,0,0,39,0], [0,0,0,0,0,0,0,0,0,0,38] ] 

norm_conf = [] 
for i in conf_arr: 
    a = 0 
    tmp_arr = [] 
    a = sum(i,0) 
    for j in i: 
     tmp_arr.append(float(j)/float(a)) 
    norm_conf.append(tmp_arr) 

plt.clf() 
fig = plt.figure() 
ax = fig.add_subplot(111) 
res = ax.imshow(array(norm_conf), cmap=cm.jet, interpolation='nearest') 
cb = fig.colorbar(res) 
savefig("confmat.png", format="png") 

Mais je veux la matrice de confusion pour afficher les numéros dessus comme ce graphique (le bon). Comment puis-je tracer la conf_arr sur le graphique?

confusion matrix

+0

wow, ce code est aussi lisible que le disque de Phaistos – siamii

Répondre

10

Vous pouvez utiliser text pour mettre du texte arbitraire dans votre parcelle. Par exemple, insérer les lignes suivantes dans votre code écrire les numéros (notez les premières et dernières lignes de votre code pour vous montrer où insérer mes lignes):

res = ax.imshow(array(norm_conf), cmap=cm.jet, interpolation='nearest') 
for i, cas in enumerate(conf_arr): 
    for j, c in enumerate(cas): 
     if c>0: 
      plt.text(j-.2, i+.2, c, fontsize=14) 
cb = fig.colorbar(res) 

matrix with numbers

+0

Merci pour votre solution. Cela fait exactement ce dont j'ai besoin. À votre santé! – Pinkie

1

La seule façon que je pouvais vraiment voir de le faire était d'utiliser des annotations. Essayez ces lignes:

for i,j in ((x,y) for x in xrange(len(conf_arr)) 
      for y in xrange(len(conf_arr[0]))): 
    ax.annotate(str(conf_arr[i][j]),xy=(i,j)) 

avant de sauvegarder la figure. Il ajoute les chiffres, mais je vais vous laisser comprendre comment obtenir les tailles des chiffres que vous le souhaitez.

+0

Impressionnant! Merci! – Pinkie