How to avoid the overlapping between "suptitle" and "subplots" when using python matplotlib?

Question:

I am trying to plot a matrix to compare some data. But the title of plot is overlapping with the subplots:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sn
   
def save_graph_cm(CMatrix):
    # CMatrix is a dict with four 3x3 pandas DataFrame
    k = 'Wine'
    id = 0
    cm = 1
    plt.suptitle("#" + str(id) + " Confusion Matrix for " + k + " dataset")
    for c_matrix in CMatrix:
        plt.subplot(2, 2, cm)
        sn.heatmap(CMatrix[c_matrix], annot=True, cmap="YlOrRd")
        plt.title("CV - " + str(cm-1))
        plt.xlabel("Predicted Classes")
        plt.ylabel("Real Classes")
        cm += 1
    plt.tight_layout()
    plt.show

What I am getting now is:

enter image description here

Asked By: Gabriel Michelassi

||

Answers:

I had a similar problem, using GridSpec as in this answer https://stackoverflow.com/a/19627237/8079057 fixed it for me.

Answered By: Adam

As of v3.3, matplotlib’s tight_layout now displays suptitle correctly:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(1, 3)
for i, ax in enumerate(axs):
    ax.plot([1, 2, 3])
    ax.set_title(f'Axes {i}')

fig.suptitle('suptitle')
fig.tight_layout()

enter image description here

Answered By: iacob
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.