Der folgende Code erzeugt Lücken zwischen den Unterplots. Wie entferne ich die Lücken zwischen den Unterplots und mache das Bild zu einem engen Raster?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
python
matplotlib
user3006135
quelle
quelle
None
tut nicht das, was du denkst, sondern bedeutet "Standard verwenden".plt.subplots_adjust(wspace=0, hspace=0)
würde Ihr Problem lösen, wenn Sie nicht'equal'
Aspekt verwenden. Siehe meine Antwort für Details.Antworten:
Mit gridspec können Sie den Abstand zwischen den Achsen steuern. Hier finden Sie weitere Informationen .
quelle
GridSpec
, wenn Sie die Figur bei der Erstellung greifen, können Sie die Entfernungen auch einstellen mit:fig.subplots_adjust(hspace=, wspace=)
for
Schleife?subplots
. Diese Antwort erledigt die Arbeit ohne Einbußensubplots
.Das Problem ist die Verwendung von
aspect='equal'
, die verhindert, dass sich die Unterzeichnungen auf ein beliebiges Seitenverhältnis ausdehnen und den gesamten leeren Raum ausfüllen.Normalerweise würde dies funktionieren:
Das Ergebnis ist folgendes:
Mit,
aspect='equal'
wie im folgenden Code:Das bekommen wir:
Der Unterschied in diesem zweiten Fall besteht darin, dass Sie die x- und y-Achse gezwungen haben, die gleiche Anzahl von Einheiten / Pixel zu haben. Da die Achsen standardmäßig von 0 auf 1 gehen (dh bevor Sie etwas zeichnen), verwenden Sie
aspect='equal'
erzwingt die , dass jede Achse ein Quadrat ist. Da die Figur kein Quadrat ist, fügt Pyplot einen zusätzlichen Abstand zwischen den Achsen horizontal hinzu.Um dieses Problem zu umgehen, können Sie Ihre Figur auf das richtige Seitenverhältnis einstellen. Wir werden hier die objektorientierte Pyplot-Schnittstelle verwenden, die ich im Allgemeinen für überlegen halte:
Hier ist das Ergebnis:
quelle
plt.subplots_adjust(wspace=0, hspace=0)
Ohne auf Gridspec vollständig zurückzugreifen, kann Folgendes auch verwendet werden, um die Lücken zu entfernen, indem wspace und hspace auf Null gesetzt werden:
Ergebend:
quelle
Hast du es versucht
plt.tight_layout()
?mit
plt.tight_layout()
ohne es:Oder: so etwas (verwenden
add_axes
)Wenn Sie keine Achsen teilen müssen, dann einfach
axLS=map(fig.add_axes, rectLS)
quelle
In neueren matplotlib-Versionen möchten Sie möglicherweise Constrained Layout ausprobieren . Dies funktioniert jedoch nicht
plt.subplot()
, daher müssen Sieplt.subplots()
stattdessen Folgendes verwenden :quelle