Wie entferne ich den Abstand zwischen Subplots in matplotlib.pyplot?

8

Ich arbeite an einem Projekt, bei dem ich ein Diagrammraster aus 10 Zeilen und 3 Spalten erstellen muss. Obwohl ich in der Lage war, die Plots zu erstellen und die Subplots zu arrangieren, war ich nicht in der Lage, ein schönes Plot ohne Leerraum wie diesen unten von gridspec documentation . .

Ich habe die folgenden Posts ausprobiert, konnte aber den weißen Bereich nicht vollständig entfernen, wie im Beispielbild. Kann mir bitte jemand eine Anleitung geben? Vielen Dank!

Hier ist mein Bild:

Unten ist mein Code. Das vollständige Skript ist hier auf GitHub . Hinweis: images_2 und images_fool sind beide numpy Arrays von abgeflachten Bildern mit Shape (1032, 10), während delta ein Bild Array von Shape (28, 28) ist.

%Vor%     
George Liu 10.12.2016, 03:45
quelle

2 Antworten

7

Eine Anmerkung am Anfang: Wenn Sie die volle Kontrolle über den Abstand haben wollen, vermeiden Sie plt.tight_layout() , da es versuchen wird, die Plots in Ihrer Figur so zu verteilen, dass sie gleichmäßig und schön verteilt sind. Dies ist meistens in Ordnung und erzeugt angenehme Ergebnisse, passt aber den Abstand nach Belieben an.

Der Grund, warum das GridSpec-Beispiel, das Sie aus der Matplotlib-Beispielgalerie zitieren, so gut ist, liegt daran, dass der Aspekt der Unterplots nicht vordefiniert ist. Das heißt, die Unterplots werden einfach auf dem Gitter erweitert und belassen den festgelegten Abstand (in diesem Fall wspace=0.0, hspace=0.0 ) unabhängig von der Figurengröße.

Im Gegensatz dazu zeichnen Sie Bilder mit imshow und der Aspekt des Bildes ist standardmäßig gleich (entspricht ax.set_aspect("equal") ). Das heißt, Sie könnten natürlich set_aspect("auto") auf jedes Plot setzen (und zusätzlich wspace=0.0, hspace=0.0 als Argumente zu GridSpec hinzufügen, wie im Beispiel der Galerie), was zu einem Plot ohne Abstände führen würde.

Bei der Verwendung von Bildern ist es jedoch sehr sinnvoll, ein gleiches Seitenverhältnis beizubehalten, so dass jedes Pixel so breit wie hoch und ein quadratisches Array als quadratisches Bild dargestellt wird.
Was Sie dann tun müssen, ist mit der Bildgröße und den Bildrändern zu spielen, um das erwartete Ergebnis zu erhalten. Das figsize Argument zur Zahl ist die Zahl (Breite, Höhe) in Zoll und hier kann das Verhältnis der beiden Zahlen mit gespielt werden. Und die Subplot-Parameter wspace, hspace, top, bottom, left können manuell angepasst werden, um das gewünschte Ergebnis zu erzielen. Unten ist ein Beispiel:

%Vor%

Bearbeiten:
Es ist natürlich wünschenswert, die Parameter nicht manuell anpassen zu müssen. So könnte man nach der Anzahl der Zeilen und Spalten einige optimale berechnen.

%Vor%     
ImportanceOfBeingErnest 10.12.2016, 11:58
quelle
3

Versuchen Sie, diese Zeile zu Ihrem Code hinzuzufügen:

%Vor%

Und für jedes Achsenobjekt-Set:

%Vor%     
Serenity 10.12.2016 06:53
quelle

Tags und Links