【问题标题】:Confusion Matrix with number of classified/misclassified instances on it (Python/Matplotlib)带有分类/错误分类实例数量的混淆矩阵(Python/Matplotlib)
【发布时间】:2011-02-23 06:42:00
【问题描述】:

我正在使用 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

【问题讨论】:

  • 哇,这段代码和费斯托斯磁盘一样可读

标签: python matplotlib confusion-matrix


【解决方案1】:

您可以使用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)

【讨论】:

  • 感谢您的解决方案。它正是我需要的。干杯!
【解决方案2】:

我真正看到的唯一方法是使用注释。试试以下几行:

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

在保存图之前。它添加了数字,但我会让你弄清楚如何获得你想要的数字的大小。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2017-01-03
    • 2019-03-01
    • 2020-09-10
    • 2017-01-13
    • 2020-06-17
    • 2020-08-21
    • 2019-05-26
    • 2021-11-11
    相关资源
    最近更新 更多