2 votes

Créez plusieurs colonnes et lignes de taille inégale dans matplotlib

Je dois créer plusieurs colonnes et lignes de tailles inégales dans matplotlib. Voici un exemple de code :

a = np.random.rand(20, 20)
b = np.random.rand(20, 5)
c = np.random.rand(5, 20)
d = np.random.rand(5,5)
arrays = [a,b,c,d]
fig, axs = plt.subplots(2, 2, sharex='col', sharey= 'row', figsize=(10,10))
for ax, ar in zip(axs.flatten(), arrays):
    ax.imshow(ar)

Cependant, voici le résultat obtenu :

python output

La colonne de droite a des images de largeur inégale pour la première et la deuxième ligne, et je voudrais qu'elles soient égales (en gros, réduire l'image en bas à droite pour avoir la même échelle que les autres images). J'avais beaucoup fait de recherches à ce sujet, mais rien ne semble fonctionner. J'avais essayé tight_layout(), quelques autres astuces de mise en forme, mais tout cela est resté sans effet...

0voto

Vous pouvez utiliser l'argument height_ratios et width_ratios du gridspec pour définir la proportion désirée que les sous-graphiques doivent occuper.

Dans ce cas, en raison de la symétrie, il s'agit simplement de la forme par exemple de b.

import numpy as np
import matplotlib.pyplot as plt

a = np.random.rand(20, 20)
b = np.random.rand(20, 5)
c = np.random.rand(5, 20)
d = np.random.rand(5,5)
arrays = [a,b,c,d]
fig, axs = plt.subplots(2, 2, sharex='col', sharey= 'row', figsize=(10,10), 
                        gridspec_kw={"height_ratios" : b.shape, 
                                     "width_ratios" : b.shape})
for ax, ar in zip(axs.flatten(), arrays):
    ax.imshow(ar)

plt.show()

description de l'image

Ou, de manière plus générale,

gridspec_kw={"height_ratios" : [a.shape[0], c.shape[0]], 
              "width_ratios" : [a.shape[1], b.shape[1]]}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X