CRoNiC
CRoNiC

Reputation: 409

Confusion Matrix font size

I have a Confusion Matrix with really small sized numbers but I can't find a way to change them.

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

thats the code I am using and the pic I get looks like: enter image description here

I would not mind changing the numbers of the classification by hand but I dont really want to do it for the labels aswell.

EDIT: Figures are bigger now but the labels stay very small

Cheers

Upvotes: 9

Views: 22356

Answers (3)

Rohan
Rohan

Reputation: 69

Found it

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)

The code changed as such

Upvotes: 4

Salah Eddine Ghamri
Salah Eddine Ghamri

Reputation: 91

Use rcParams to change all text in the plot:

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)

Upvotes: 8

ProteinGuy
ProteinGuy

Reputation: 1942

Use sns.set to change the font size of the heatmap values. You can specify the font size of the labels and the title as a dictionary in ax.set_xlabel, ax.set_ylabel and ax.set_title, and the font size of the tick labels with 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()

Upvotes: 10

Related Questions