2 votes

Comment utiliser plusieurs couleurs de fond pour une figure en Python ?

Je veux juste tracer plusieurs ensembles de données, disons 4, en utilisant des sous-figures, c'est-à-dire quelque chose comme

fig = figure(1)
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)

Cela fonctionne bien. Mais j'aimerais en plus définir des couleurs d'arrière-plan différentes pour les deux sous-plans de la première ligne et ceux de la deuxième ligne, de sorte que la moitié supérieure de l'arrière-plan de la figure soit noire et la moitié inférieure blanche. Quelqu'un peut-il me dire comment faire ?

Eh bien, ce que j'ai essayé jusqu'à présent, c'est de définir deux figures, une avec un fond noir et une autre avec un fond blanc, en ajoutant les deux premières sous-figures à la figure 1 et les autres à la figure 2. A la fin, j'ai fusionné les deux figures dans un PDF mais le résultat n'était pas satisfaisant car le fichier PDF était en désordre et les deux figures ressemblaient à deux figures distinctes et non à une seule.

De plus, j'ai essayé quelque chose comme

fig = figure(1) 
rect = fig.patch
rect.set_facecolor('black')
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
rect = fig.patch
rect.set_facecolor('white')
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)

mais apparemment ça ne peut pas fonctionner comme ça. J'ai ensuite essayé de créer un rectangle comme arrière-plan pour chaque sous-figure en utilisant matplotlib.patches, ce qui semble également inapproprié.

1voto

Cornelius Points 36

J'ai eu le même problème et j'ai trouvé la solution suivante :

import matplotlib.pyplot as plt
import matplotlib.patches as patches

fig = plt.figure(1)

# create rectangles for the background
upper_bg = patches.Rectangle((0, 0.5), width=1, height=0.5, 
                             transform=fig.transFigure,      # use figure coordinates
                             facecolor='gray',               # define color
                             edgecolor='none',               # remove edges
                             zorder=0)                       # send it to the background
lower_bg = patches.Rectangle((0, 0), width=1.0, height=0.5, 
                             transform=fig.transFigure,      # use figure coordinates
                             facecolor='white',              # define color
                             edgecolor='none',               # remove edges
                             zorder=0)                       # send it to the background

# add rectangles to the figure
fig.patches.extend([upper_bg, lower_bg])

# create subplots as usual
fig.add_subplot(221)
fig.add_subplot(222)
fig.add_subplot(223)
fig.add_subplot(224)

plt.show()

Notez que vous devez explicitement définir zorder car sinon, les patchs sont devant les intrigues secondaires. La figure résultante se présente comme suit :

Resulting figure with two different background colors Cette approche repose toujours sur matplotlib.patches et peut donc ne pas être le propre que vous recherchez, mais j'ai pensé qu'il pourrait être utile pour les autres personnes ayant ce problème.

Vous trouverez plus d'informations sur la manipulation de la figure elle-même ici : http://matplotlib.org/users/artists.html#figure-container

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