How to plot confusion matrix with string axis rather than integer in python

前端 未结 4 1854
星月不相逢
星月不相逢 2020-12-02 08:18

I am following a previous thread on how to plot confusion matrix in Matplotlib. The script is as follows:

from numpy import *
import matplotlib.pyplot as plt         


        
4条回答
  •  日久生厌
    2020-12-02 09:13

    Here's what I'm guessing you want: enter image description here

    import numpy as np
    import matplotlib.pyplot as plt
    
    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)
    
    fig = plt.figure()
    plt.clf()
    ax = fig.add_subplot(111)
    ax.set_aspect(1)
    res = ax.imshow(np.array(norm_conf), cmap=plt.cm.jet, 
                    interpolation='nearest')
    
    width, height = conf_arr.shape
    
    for x in xrange(width):
        for y in xrange(height):
            ax.annotate(str(conf_arr[x][y]), xy=(y, x), 
                        horizontalalignment='center',
                        verticalalignment='center')
    
    cb = fig.colorbar(res)
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    plt.xticks(range(width), alphabet[:width])
    plt.yticks(range(height), alphabet[:height])
    plt.savefig('confusion_matrix.png', format='png')
    

提交回复
热议问题