【问题标题】:Confusion Matrix font size混淆矩阵字体大小
【发布时间】:2021-04-28 14:32:46
【问题描述】:

我有一个数字非常小的混淆矩阵,但我找不到改变它们的方法。

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, rf_predictions)
ax = plt.subplot()
sns.set(font_scale=3.0) #edited as suggested
sns.heatmap(cm, annot=True, ax=ax, cmap="Blues", fmt="g");  # annot=True to annotate cells

# labels, title and ticks
ax.set_xlabel('Predicted labels');
ax.set_ylabel('Observed labels');
ax.set_title('Confusion Matrix');
ax.xaxis.set_ticklabels(['False', 'True']);
ax.yaxis.set_ticklabels(['Flase', 'True']);
plt.show()

这就是我正在使用的代码,我得到的图片如下所示:

我不介意手动更改分类的数字,但我也不想为 标签 这样做。

编辑:现在数字变大了,但标签仍然很小

干杯

【问题讨论】:

  • 可以在seaborn.set中使用font_scale参数
  • 适用于数字和标题,但标签保持较小。有什么建议吗?

标签: python scikit-learn confusion-matrix


【解决方案1】:

使用sns.set 更改热图值的字体大小。您可以在ax.set_xlabel、ax.set_ylabel 和ax.set_title 中将标签和标题的字体大小指定为字典,在ax.tick_params 中指定刻度标签的字体大小。


from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, rf_predictions)

ax = plt.subplot()
sns.set(font_scale=3.0) # Adjust to fit
sns.heatmap(cm, annot=True, ax=ax, cmap="Blues", fmt="g");  

# Labels, title and ticks
label_font = {'size':'18'}  # Adjust to fit
ax.set_xlabel('Predicted labels', fontdict=label_font);
ax.set_ylabel('Observed labels', fontdict=label_font);

title_font = {'size':'21'}  # Adjust to fit
ax.set_title('Confusion Matrix', fontdict=title_font);

ax.tick_params(axis='both', which='major', labelsize=10)  # Adjust to fit
ax.xaxis.set_ticklabels(['False', 'True']);
ax.yaxis.set_ticklabels(['False', 'True']);
plt.show()

【讨论】:

  • 适用于数字和标题,但标签保持较小。有什么建议吗?
  • @CRoNiC 我已更新我的答案以解决您的评论。它现在对你有用吗?如果可以,我将不胜感激,谢谢。
【解决方案2】:

使用 rcParams 更改绘图中的所有文本:

fig, ax = plt.subplots(figsize=(10,10))
plt.rcParams.update({'font.size': 16})
disp = plot_confusion_matrix(clf, Xt, Yt,
                             display_labels=classes,
                             cmap=plt.cm.Blues,
                             normalize=normalize,
                             ax=ax)

【讨论】:

    【解决方案3】:

    找到了

    import itertools
    import matplotlib.pyplot as plt
    
    def plot_confusion_matrix(cm,classes,normalize=False,title='Confusion 
                                                matrix',cmap=plt.cm.Blues):
    
      plt.figure(figsize=(15,10))
    
      plt.imshow(cm,interpolation='nearest',cmap=cmap)
      plt.title(title)
      plt.colorbar()
    
      tick_marks=np.arange(len(classes))
      plt.xticks(tick_marks,classes,rotation=45,fontsize=15)
      plt.yticks(tick_marks,classes,fontsize=15,rotation=90)
    
      if normalize:
         cm=cm.astype('float')/cm.sum(axis=1)[:,np.newaxis]
         cm=np.around(cm,decimals=2)
         cm[np.isnan(cm)]=0.0
         print('Normalized confusion matrix')
    
      else:
         print('Confusion matrix, without normalization')
    
    
      thresh=cm.max()/2
    
      for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
    
        plt.text(j, i, cm[i, j],
    
                 horizontalalignment="center",fontsize=15,
    
                 color="white" if cm[i, j] > thresh else "black")
    
        plt.tight_layout()
    
        plt.ylabel('True label',fontsize=20)
    
        plt.xlabel('Predicted label',fontsize=20)
    

    代码就这样改了

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2018-11-27
      • 2021-10-26
      • 2022-06-10
      • 1970-01-01
      • 2015-12-17
      • 2020-10-01
      • 2012-01-20
      • 2019-11-23
      相关资源
      最近更新 更多