2016-07-12 10 views
2

Ich möchte nur einige Datensätze plotten, sagen 4, Subfigures verwenden, das heißt so etwas wieWie verwendet man mehrere Hintergrundfarben für eine Figur in Python?

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

Das ist gut funktioniert. Zusätzlich möchte ich für die beiden Unterplots in der ersten Reihe und in der zweiten Reihe unterschiedliche Hintergrundfarben einstellen, so dass die obere Hälfte des Bildhintergrunds schwarz und die untere Hälfte weiß ist. Kann mir jemand sagen, wie das geht?

Nun, was ich bisher versucht habe, war zwei Zahlen zu definieren, eine mit einem schwarzen und eine andere mit einem weißen Hintergrund, die ersten beiden Subfiguren zu Abbildung 1 und die anderen zu Abbildung 2. Am Ende fusionierte ich beide Zahlen in ein PDF, aber die Ergebnisse waren nicht befriedigend, da die PDF-Datei ein Durcheinander war und die zwei Figuren tatsächlich wie zwei verschiedene aussahen, aber nicht wie eine einzelne Figur.

Außerdem habe ich versucht, so etwas wie

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) 

aber anscheinend kann sie nicht arbeiten. Dann habe ich versucht, mit Matplotlib.patches ein Rechteck als Hintergrund für jede Teilfigur zu erstellen, was ebenfalls unpassend erscheint.

+0

Könnten Sie sind, was Sie bisher versucht haben? – sawreals

+0

Mögliches Duplikat von [Hintergrundfarbe für Subplot setzen] (http://stackoverflow.com/questions/23313586/set-background-color-for-subplot) – albert

+0

Wie ich durch Ändern der Hintergrundfarbe für den Subplot verstanden habe, ändere ich die Farbe des Plotbereichs, aber ich möchte die Farbe der Leinwand ändern. – berti

Antwort

1

Ich hatte das gleiche Problem und kam mit der folgenden Lösung:

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() 

Beachten Sie, dass Sie explizit zorder setzen müssen, weil sonst die Flecken vor den Nebenhandlungen sind. Die sich ergebende Figur sieht wie folgt aus:

Resulting figure with two different background colors Dieser Ansatz beruht nach wie vor auf matplotlib.patches und kann daher nicht die sauber, die Sie für suchen, aber ich dachte, es für andere Menschen nützlich sein könnte, dieses Problem zu haben.

Mehr Informationen über die Manipulation der Figur selbst ist hier zu finden: http://matplotlib.org/users/artists.html#figure-container