[Python] Python matplotlib tight_layout spacing for subplots

Discussão em 'Python' iniciado por Stack, Fevereiro 24, 2025.

  1. Stack

    Stack Membro Participativo

    I'm using matplotlib to plot my data in a 4x2 grid of subplots. The matplotlib.pyplot.tight_layout automatically fits the subplots, legend, and text labels into a figure that I can save as png. However, when the legend is extremely long, tight_layout seems to add extra horizontal space to some subplots.

    What is the most efficient way to avoid this extra space? The subplots_adjust function looks promising, but there's a lot of trial-and-error to adjust everything and I'm hoping to find a quicker automated solution using tight_layout. My MWE is:

    import numpy as np
    import matplotlib.pyplot as plt

    t = np.linspace(-5,5,100)
    x1 = np.sin(t)
    x2 = np.cos(t)
    x3 = np.sin(2*t)
    x4 = np.cos(2*t)
    x5 = 2*np.sin(t)
    x6 = 2*np.cos(t)
    x7 = np.sin(0.5*t)
    x8 = np.cos(0.5*t)

    fig, ax = plt.subplots(nrows=4, ncols=2, figsize=(10, 7))
    for r in range(4):
    for c in range(2):
    ax[r,c].plot(t,x1,label='preliminary 1')
    ax[r,c].plot(t,x2,label='preliminary 2')
    ax[r,c].plot(t,x3,label='trial 1, result 1')
    ax[r,c].plot(t,x4,label='trial 1, result 2')
    ax[r,c].plot(t,x5,label='trial 1, result 6')
    ax[r,c].plot(t,x6,label='trial 4, result 1')
    ax[r,c].plot(t,x7,label='trial 12, result 2')
    ax[r,c].plot(t,x8,label='trial 15, result 2')
    ax[0,1].legend(loc='best', bbox_to_anchor = (0.3, -1.1, 1.2, 2))
    plt.tight_layout()
    plt.savefig('myfig.png')
    plt.show()


    [​IMG]

    Continue reading...

Compartilhe esta Página