How to adjust space between Matplotlib/Seaborn subplots for multi-plot layouts

13,665

Have you tried adjusting hspace = 0.8 instead? According to matplotlib's reference that's the argument for changing the height between subplots, and not top.

plt.subplots_adjust(hspace = 0.8)
Share:
13,665
Bharat
Author by

Bharat

Updated on June 05, 2022

Comments

  • Bharat
    Bharat almost 2 years

    The following figure shows the standard Seaborn/Matplotlib Boxplots in a 2 X 2 grid layout:

    seaborn/matplotlib sample boxplots

    It is pretty much what I want except that I would like to put some more space between the first row of the of the plots and the second row. The distance between the X-axis labels of the first row plots and the title of the second row plots is almost non-existent. I have been playing with the parameters as explained in this thread:

    StackOverflow Thread

    Here is my relevant code:

        import math
        import pandas as pd
        import numpy as np
        import matplotlib.pyplot as plt
        from matplotlib.backends.backend_pdf import PdfPages
        from PyPDF2 import PdfFileMerger
        import seaborn as sns
        num_cols = 2
        num_rows = int(math.ceil(tot_plots / float(num_cols)))
        fig, axes = plt.subplots(nrows=num_rows, ncols=num_cols, figsize=(16, 16))
        x_var = df_orig['hra']
        for idx, ax in enumerate(axes.flat):
            data_var = current_cols[idx]
            y_var = df_orig[data_var]
            title_str = ''
            sns.boxplot(x=x_var, y=y_var, ax=ax,
                        order=order, palette=color, showfliers=False)
            ax.set_title(data_var + title_str)
            ax.xaxis.label.set_visible(False)
            ax.yaxis.label.set_visible(False)
            ax.xaxis.set_tick_params(labelsize=8)
            ax.yaxis.set_tick_params(labelsize=8)
            plt.setp(ax.xaxis.get_majorticklabels(), rotation=90)
        fig.suptitle("Sampling BoxPlots", x=0.5, y=0.93, fontsize=14, fontweight="bold")
        plt.tight_layout()
        plt.subplots_adjust(top=0.8)
        pdf_pages = PdfPages(file_name)
        pdf_pages.savefig()
        pdf_pages.close()
    
  • Bharat
    Bharat almost 7 years
    Thank you. For any reader of this thread, I had to comment out (or remove) the line which says 'plt.tight_layout()'. Apparently, tight_layout and custom adjustments are mutually exclusive.