2010-05-24 5 views
10

Я черчение матрицы путаницы с Matplotlib со следующим кодом:Путаница Матрица с числом классифицированных/неправильно классифицированных случаев на нем (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") 

Но я хочу матрицы неточностей, чтобы показать номера на нем, как этот графический (правый). Как я могу построить график conf_arr?

confusion matrix

+0

вау, этот код такой же читаемый, как и диск Phaistos – siamii

ответ

10

Вы можете использовать text, чтобы разместить произвольный текст в своем заговоре. Например, вставив следующие строки в ваш код будет писать цифры (обратите внимание на первые и последние строки из кода, чтобы показать вам, где вставить свои строки):

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

Спасибо за ваше решение. Он точно делает то, что мне нужно. Ура! – Pinkie

1

Единственный способ, которым я мог видеть делать это с помощью аннотаций. Попробуйте следующие строки:

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

перед сохранением рисунка. Он добавляет числа, но я дам вам понять, как получить размеры чисел, как вы хотите их.

+0

Удивительный! Благодаря! – Pinkie