Très semblable à cette question mais avec la différence que mon chiffre peut être aussi grand que nécessaire.
J'ai besoin de générer tout un tas de parcelles empilées verticalement dans matplotlib. Le résultat sera enregistré avec figsave et affiché sur une page Web. Par conséquent, la taille de l'image finale est importante tant que les sous-parcelles sont espacées de manière à ne pas se chevaucher.
Quelle que soit la taille de ma figure, les sous-parcelles 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)
Essayez d'utiliser plt.tight_layout
Comme exemple rapide:
_import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=4, ncols=4)
fig.tight_layout() # Or equivalently, "plt.tight_layout()"
plt.show()
_
Sans mise en page serrée
Avec mise en page serrée
Vous pouvez utiliser plt.subplots_adjust
pour modifier l'espacement entre les sous-parcelles (source)
signature d'appel:
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
La signification des paramètres (et les valeurs par défaut suggérées) est la suivante:
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
J'ai trouvé que subplots_adjust (hspace = 0.001) est ce qui a finalement fonctionné pour moi. Lorsque j'utilise space = None, il y a toujours un espace blanc entre chaque parcelle. Le fixer à quelque chose de très proche de zéro semble cependant les obliger à s’aligner. Ce que j'ai téléchargé ici n'est pas le code le plus élégant, mais vous pouvez voir comment fonctionne hspace.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tic
fig = plt.figure()
x = np.arange(100)
y = 3.*np.sin(x*2.*np.pi/100.)
for i in range(5):
temp = 510 + i
ax = plt.subplot(temp)
plt.plot(x,y)
plt.subplots_adjust(hspace = .001)
temp = tic.MaxNLocator(3)
ax.yaxis.set_major_locator(temp)
ax.set_xticklabels(())
ax.title.set_visible(False)
plt.show()
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()
o
fig = plt.figure(figsize=(10,60))
fig.subplots_adjust( ... )
La taille de l'image est importante.
"J'ai essayé de jouer avec hspace, mais son augmentation ne semble que rendre tous les graphiques plus petits sans résoudre le problème de chevauchement."
Ainsi, pour créer plus d’espace et conserver la taille de la sous-parcelle, l’image totale doit être plus grande.
Vous pouvez essayer le subplot_tool ()
plt.subplot_tool()
Semblable à _tight_layout
_, matplotlib offre maintenant (à partir de la version 2.2) constrained_layout
. Contrairement à _tight_layout
_, qui peut être appelé à tout moment dans le code pour une seule présentation optimisée, _constrained_layout
_ est une propriété qui peut être active et optimiser la présentation avant chaque étape de dessin.
Par conséquent, il doit être activé avant ou pendant la création d'une sous-parcelle, tel que figure(constrained_layout=True)
ou subplots(constrained_layout=True)
.
Exemple:
_import matplotlib.pyplot as plt
fig, axes = plt.subplots(4,4, constrained_layout=True)
plt.show()
_
constrained_layout peut également être défini via rcParams
_plt.rcParams['figure.constrained_layout.use'] = True
_
Voir le quelle est la nouvelle entrée et le Guide de mise en page contraint