2010-05-24 10 views
10

sto tramando una matrice confusione con matplotlib con il seguente codice:matrice di confusione con il numero di istanze classificati/erroneamente classificati su di esso (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") 

Ma io voglio la matrice di confusione per mostrare i numeri su di esso piace questo grafico (quello giusto). Come posso tracciare il conf_arr sul grafico?

confusion matrix

+0

wow, questo codice è leggibile come il disco di Phaistos – siamii

risposta

10

È possibile utilizzare text per inserire testo arbitrario nella trama. Ad esempio, inserendo le seguenti righe nel tuo codice scriverà i numeri (da notare le prime e le ultime righe sono dal codice per mostrare dove inserire le mie linee):

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

Grazie per la soluzione. Fa esattamente ciò di cui ho bisogno. Saluti! – Pinkie

1

L'unico modo che ho potuto vedere veramente di farlo era quello di utilizzare le annotazioni. Prova queste righe:

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)) 

prima di salvare la figura. Aggiunge i numeri, ma ti permetterò di capire come ottenere le dimensioni dei numeri come li vuoi.

+0

Fantastico! Grazie! – Pinkie

Problemi correlati