Ich versuche ein quadratisches Diagramm (mit imshow) zu erstellen, dh ein Seitenverhältnis von 1: 1, aber ich kann nicht. Keine dieser Arbeiten:
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
Es scheint, als würden die Anrufe einfach ignoriert (ein Problem, das ich bei matplotlib oft zu haben scheine).
python
matplotlib
jtlz2
quelle
quelle
ax.axis('equal')
zufällig versucht ? Wie alle gesagt haben, sollte das, was Sie getan haben, funktionieren,ax.axis
könnte aber ein anderer Weg sein, um eine Problemumgehung zu versuchen.Antworten:
Das dritte Mal ist der Charme. Ich vermute, dass dies ein Fehler ist und Zhenyas Antwort legt nahe, dass er in der neuesten Version behoben ist. Ich habe Version 0.99.1.1 und habe die folgende Lösung erstellt:
Dies ist 'force.png':
Nachfolgend sind meine erfolglosen, aber hoffentlich informativen Versuche aufgeführt.
Zweite Antwort:
Meine 'ursprüngliche Antwort' unten ist übertrieben, da sie etwas Ähnliches tut
axes.set_aspect()
. Ich denke du willst es benutzenaxes.set_aspect('auto')
. Ich verstehe nicht, warum dies der Fall ist, aber es erzeugt für mich ein quadratisches Bilddiagramm, zum Beispiel dieses Skript:Erzeugt ein Bilddiagramm mit dem gleichen Seitenverhältnis: und eines mit dem automatischen Seitenverhältnis:
Der unten in der 'ursprünglichen Antwort' angegebene Code bietet einen Ausgangspunkt für ein explizit gesteuertes Seitenverhältnis, scheint jedoch ignoriert zu werden, sobald eine Imshow aufgerufen wird.
Ursprüngliche Antwort:
Hier ist ein Beispiel für eine Routine, die die Subplot-Parameter so anpasst, dass Sie das gewünschte Seitenverhältnis erhalten:
Dies ergibt eine Figur wie folgt:
Ich kann mir vorstellen, dass Sie, wenn Sie mehrere Unterzeichnungen in der Abbildung haben, die Anzahl der Unterzeichnungen y und x als Schlüsselwortparameter (standardmäßig jeweils 1) in die bereitgestellte Routine aufnehmen möchten. Wenn Sie dann diese Zahlen und die Schlüsselwörter
hspace
und verwendenwspace
, können Sie sicherstellen, dass alle Unterzeichnungen das richtige Seitenverhältnis haben.quelle
get_images
eine leere Liste ist (wie es passieren würde,ax.plot([0,1],[0,2])
können Sieget_xlim
undget_ylim
Welche
matplotlib
Version verwenden Sie? Ich musste kürzlich ein Upgrade durchführen1.1.0
undadd_subplot(111,aspect='equal')
funktioniert damit für mich.quelle
matplotlib
Version2.0.2
.jupyter notebook
Version5.0.0
. Vielen Dank.Nach vielen Jahren des Erfolgs mit den obigen Antworten habe ich festgestellt, dass dies nicht wieder funktioniert - aber ich habe eine funktionierende Lösung für Nebenhandlungen bei gefunden
https://jdhao.github.io/2017/06/03/change-aspect-ratio-in-mpl
Mit voller Anerkennung des oben genannten Autors (der vielleicht lieber hier posten kann) sind die relevanten Zeilen:
Die Verknüpfung enthält auch eine kristallklare Erklärung der verschiedenen Koordinatensysteme, die von matplotlib verwendet werden.
Vielen Dank für alle tollen Antworten - insbesondere für @ Yann's, die der Gewinner bleiben werden.
quelle
Sie sollten es mit figaspect versuchen. Für mich geht das. Aus den Dokumenten:
Edit: Ich bin mir nicht sicher, wonach du suchst. Der obige Code ändert die Zeichenfläche (die Plotgröße). Wenn Sie die Größe des matplotlib-Fensters der Abbildung ändern möchten, verwenden Sie:
Dies ergibt ein Fenster von 5x1 (Bxh).
quelle
Diese Antwort basiert auf Yanns Antwort. Hiermit wird das Seitenverhältnis für lineare oder Log-Log-Diagramme festgelegt. Ich habe zusätzliche Informationen von https://stackoverflow.com/a/16290035/2966723 verwendet , um zu testen, ob die Achsen logarithmisch skaliert sind.
Natürlich können Sie jede Version von
log
Ihnen verwenden, die ich verwendet habescipy
, abernumpy
odermath
sollte in Ordnung sein.quelle