如何在python中使用修改后的输出大小绘制混淆矩阵并输出为.svg图像?

Posted

技术标签:

【中文标题】如何在python中使用修改后的输出大小绘制混淆矩阵并输出为.svg图像?【英文标题】:How to get a confusion matrix plotted with modified output size and output as .svg image in python? 【发布时间】:2019-11-18 09:00:54 【问题描述】:

我想绘制一个混淆矩阵,因为我有两个矩阵,即 y_test_ 和 y_pred。我希望输出图像为“.svg”。因为我必须将图像放在我的项目报告中,所以我希望它的大小可以修改。我希望能够根据我的论文需要修改图像大小。

我已经尝试过“sklearn.metrics”中的“confusion_matrix”函数。但是输出图像比我需要的太小了。此外,图像为“.png”格式。我使用的代码如下所示。

from sklearn.metrics import confusion_matrix

def plot_confusion_matrix(y_true, y_pred, classes, normalize=False, title=None, cmap=plt.cm.Blues):
    if not title:
        if normalize:
            title = 'Normalized confusion matrix'
        else:
            title = 'Confusion matrix, without normalization'

    cm = confusion_matrix(y_true, y_pred)

    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        print("Normalized confusion matrix")
    else:
        print('Confusion matrix, without normalization')

    print(cm)

    fig, ax = plt.subplots()
    im = ax.imshow(cm, interpolation='nearest', cmap=cmap)

    ax.figure.colorbar(im, ax=ax)
    ax.set(xticks=np.arange(cm.shape[1]), yticks=np.arange(cm.shape[0]), xticklabels=classes, yticklabels=classes, title=title, 
           ylabel='True label',
           xlabel='Predicted label')

    plt.setp(ax.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor")

    fmt = '.2f' if normalize else 'd'
    thresh = cm.max() / 2.

    for i in range(cm.shape[0]):
        for j in range(cm.shape[1]):
            ax.text(j, i, format(cm[i, j], fmt),
                    ha="center", va="center",
                    color="white" if cm[i, j] > thresh else "black")

    fig.tight_layout()
    return ax

plot_confusion_matrix(y_test_, y_pred, classes=class_names, title='Confusion matrix, without normalization')
plot_confusion_matrix(y_test_, y_pred, classes=class_names, normalize=True, title='Normalized confusion matrix')

plt.show()

此代码生成的图像不能清晰地放在纸上,并且不是“.svg”形式。建议我做什么。

【问题讨论】:

【参考方案1】:

为了清晰的输出

您还没有提供完整的代码,但是我认为如果您使用的是 seaborn,您可以使用sns.set(),如下所示

import matplotlib.pyplot as plt
import seaborn as sn
sn.set()
%matplotlib inline

为了将文件保存为 .svg 使用,在调用plt.show()之前进行以下操作@

plt.savefig("test.svg", format="svg")

plt.savefig("test.svg")

【讨论】:

以上是关于如何在python中使用修改后的输出大小绘制混淆矩阵并输出为.svg图像?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab如何在matlab利用plotconfusion中绘制混淆矩阵

混淆矩阵颜色匹配数据大小而不是分类精度

matlab如何在matlab利用plotconfusion中绘制混淆矩阵

python是不是有绘制混淆矩阵的函数,怎么来实现

如何用最少的代码在 Python 中绘制不同类型的混淆矩阵?

绘制的混淆矩阵值相互重叠,总类 90