[python] Améliorer la taille / l'espacement des sous-placettes avec de nombreuses sous-placettes dans matplotlib


Answers

Vous pouvez utiliser plt.subplots_adjust pour changer l'espacement entre les sous-placettes (source)

signature d'appel:

subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

Les significations des paramètres (et les valeurs par défaut suggérées) sont:

left  = 0.125  # the left side of the subplots of the figure
right = 0.9    # the right side of the subplots of the figure
bottom = 0.1   # the bottom of the subplots of the figure
top = 0.9      # the top of the subplots of the figure
wspace = 0.2   # the amount of width reserved for blank space between subplots
hspace = 0.2   # the amount of height reserved for white space between subplots

Les valeurs par défaut sont contrôlées par le fichier rc

Question

Très similaire à cette question mais avec la différence que ma taille peut être aussi grande qu'elle doit l'être.

J'ai besoin de générer tout un tas de parcelles verticalement empilées dans matplotlib. Le résultat sera sauvegardé en utilisant figsave et visualisé sur une page web, donc je me fiche de la taille de l'image finale tant que les sous-placettes sont espacées de façon à ce qu'elles ne se chevauchent pas.

Peu importe la taille que j'attribue au personnage, les intrigues secondaires semblent toujours se chevaucher.

Mon code ressemble actuellement à

import matplotlib.pyplot as plt
import my_other_module

titles, x_lists, y_lists = my_other_module.get_data()

fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
    plt.subplot(len(titles), 1, i)
    plt.xlabel("Some X label")
    plt.ylabel("Some Y label")
    plt.title(titles[i])
    plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)



import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10,60))
plt.subplots_adjust( ... )

La méthode plt.subplots_adjust :

def subplots_adjust(*args, **kwargs):
    """
    call signature::

      subplots_adjust(left=None, bottom=None, right=None, top=None,
                      wspace=None, hspace=None)

    Tune the subplot layout via the
    :class:`matplotlib.figure.SubplotParams` mechanism.  The parameter
    meanings (and suggested defaults) are::

      left  = 0.125  # the left side of the subplots of the figure
      right = 0.9    # the right side of the subplots of the figure
      bottom = 0.1   # the bottom of the subplots of the figure
      top = 0.9      # the top of the subplots of the figure
      wspace = 0.2   # the amount of width reserved for blank space between subplots
      hspace = 0.2   # the amount of height reserved for white space between subplots

    The actual defaults are controlled by the rc file
    """
    fig = gcf()
    fig.subplots_adjust(*args, **kwargs)
    draw_if_interactive()

ou

fig = plt.figure(figsize=(10,60))
fig.subplots_adjust( ... )

La taille de l'image est importante.

"J'ai essayé de jouer avec hspace, mais l'augmenter semble seulement rendre tous les graphiques plus petits sans résoudre le problème de chevauchement."

Ainsi, pour faire plus d'espace blanc et conserver la taille de la sous-représentation, l'image totale doit être plus grande.




Vous n'avez pas besoin d'over-engineering ici, utilisez simplement plt.tight_layout()




Related