Was bedeutet das Argument in fig.add_subplot(111)?

Lesezeit: 4 Minuten

Benutzer-Avatar von pleaseontbelong
happyontbelong

Manchmal stoße ich auf Code wie diesen:

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
fig = plt.figure()
fig.add_subplot(111)
plt.scatter(x, y)
plt.show()

Was produziert:

Beispieldiagramm, das durch den enthaltenen Code erzeugt wird

Ich habe die Dokumentation wie verrückt gelesen, aber ich kann keine Erklärung dafür finden 111. manchmal sehe ich a 212.

Was bedeutet das Argument von fig.add_subplot() bedeuten?

  • Hallo. Haben Sie eine Antwort gefunden, was bedeutet bitte fig.add_subplot(111)?

    – Durchschn

    28. November 2021 um 20:33 Uhr

Benutzeravatar von SaiyanGirl
SaiyanGirl

Ich denke, das wird am besten durch das folgende Bild erklärt:

Geben Sie hier die Bildbeschreibung ein

Um das Obige zu initialisieren, würde man Folgendes eingeben:

import matplotlib.pyplot as plt
fig = plt.figure()
fig.add_subplot(221)   #top left
fig.add_subplot(222)   #top right
fig.add_subplot(223)   #bottom left
fig.add_subplot(224)   #bottom right 
plt.show()

  • Ich denke, die Version mit Kommas ist viel intuitiver und lesbarer als die Version mit 3-stelligen Zahlen

    – Endolith

    11. April 2014 um 14:19 Uhr

  • Das ist großartig, es zeigt, wie man “Subplots in einem Raster positioniert”, sei es ein 2×2-Raster wie das oben dargestellte Beispiel oder ein Raster aus 4×4-Graphen usw. Aber kann jemand bitte erklären, was die Größe dieser Graphen bestimmt, die angezeigt werden. Die Voreinstellungen für (2,2,1) finde ich ziemlich klein, ich hätte es gerne doppelt so groß oder mehr.

    – Yoshiserry

    2. Dezember 2014 um 0:19 Uhr

  • Das ist sehr hilfreich. Dieses Bild wäre etwas schöner, wenn es nicht quadratisch (2×2) wäre, aber ansonsten sehr hilfreich.

    – TravisJ

    6. März 2015 um 18:16 Uhr

  • @TravisJ Wow, was für ein Zufall! Ich habe ungefähr eine Stunde, bevor du das geschrieben hast, genau dasselbe gedacht! werde ich bald ändern 🙂

    – SaiyanGirl

    6. März 2015 um 22:58 Uhr

  • Sehr hilfreiche Antwort! Obwohl ich denke, dass die Bearbeitung ungenau ist. Das Verhalten, Nebenhandlungen mit Aussagen wie 1:2 bzw [1 3] wird von Matplotlib nicht unterstützt (zumindest nicht in 1.5.0) und scheint nur Matlab zu sein. (Beachten Sie, dass es in Matplotlib andere Optionen gibt, um dieses Verhalten zu erreichen, z Gitterspez )

    – Labor

    31. März 2016 um 8:14 Uhr

Hierbei handelt es sich um Rasterparameter der Unterdarstellung, die als einzelne ganze Zahl codiert sind. Zum Beispiel bedeutet „111“ „1×1-Raster, 1. Teilstück“ und „234“ bedeutet „2×3-Raster, 4. Teilstück“.

Alternativform für add_subplot(111) ist add_subplot(1, 1, 1).

  • Gibt es dazu eine ausführliche Dokumentation? Was ist in diesem Zusammenhang der Unterschied zwischen einem 1×1-Raster und einem 2×3-Raster?

    – Donatello

    30. November 2010 um 12:34 Uhr

  • 1×1 Raster = 1 Zeile, 1 Spalte. 2×3-Raster = 2 Zeilen, 3 Spalten. Die dritte Zahl beginnt bei 1 und erhöht die Zeile zuerst. Weitere Informationen finden Sie in der Dokumentation von subplot().

    – Christian Alis

    2. Februar 2011 um 16:54 Uhr

  • Wie andere (vor mehr als zwei Jahren) erklärten, ist dies ein Erbe von Matlab. Aber im Interesse zukünftiger Leser sollten Sie wissen, dass es eine bessere Alternative in Form von gibt subplots() Methode.

    – jarondl

    15. November 2012 um 14:30 Uhr

  • Dokumentation des Nachlasses subplot() ist hier und subplots() ist hier.

    – cryzeewulf

    24. Oktober 2014 um 4:41 Uhr

Benutzeravatar von DaveTM
DaveTM

Die Antwort von Constantin ist genau richtig, aber für mehr Hintergrundinformationen wird dieses Verhalten von Matlab geerbt.

Das Matlab-Verhalten wird in der erklärt Abbildung einrichten – Anzeigen mehrerer Diagramme pro Abbildung Abschnitt der Matlab-Dokumentation.

subplot(m,n,i) zerlegt das Figurenfenster in eine m-mal-n-Matrix kleiner Subplots und wählt den i-Subplot für den aktuellen Plot aus. Die Plots werden entlang der obersten Reihe des Figurenfensters nummeriert, dann der zweiten Reihe und so weiter.

  • Das ist Matplotlib, nicht Matlab.

    – dom0

    12. Mai 2012 um 18:50 Uhr

  • Ein Großteil des Verhaltens von Matplotlibs wird von Matlab geerbt. Da die Matlab-Dokumentation besser war, dachte ich, es könnte helfen, zu erklären, wie sich dieser spezifische Funktionsaufruf verhält. Ja, Sie haben Recht, diese (Frage) bezieht sich auf Matplotlib. Das Matplotlib-Subplot-Dokumentation ist meiner Meinung nach weniger eindeutig.

    – DaveTM

    24. Mai 2012 um 7:55 Uhr


  • Die MATLAB-Dokumentation ist umgezogen.

    – dotancohen

    8. Dezember 2014 um 11:12 Uhr

Meine Lösung ist

fig = plt.figure()
fig.add_subplot(1, 2, 1)   #top and bottom left
fig.add_subplot(2, 2, 2)   #top right
fig.add_subplot(2, 2, 4)   #bottom right 
plt.show()

2x2-Gitter mit 1 und 3 zusammenführen

Benutzeravatar von Pritz
Pritz

Geben Sie hier die Bildbeschreibung ein

import matplotlib.pyplot as plt
plt.figure(figsize=(8,8))
plt.subplot(3,2,1)
plt.subplot(3,2,3)
plt.subplot(3,2,5)
plt.subplot(2,2,2)
plt.subplot(2,2,4)

Der erste Code erstellt den ersten Subplot in einem Layout mit 3 Zeilen und 2 Spalten.

Die drei Graphen in der ersten Spalte bezeichnen die 3 Zeilen. Der zweite Plot kommt direkt unter dem ersten Plot in derselben Spalte und so weiter.

Die letzten beiden Plots haben Argumente (2, 2) was bedeutet, dass die zweite Spalte nur zwei Zeilen hat, verschieben sich die Positionsparameter zeilenweise.

Benutzeravatar von Chabo
Chabo

fig.add_subplot(ROW,COLUMN,POSITION)

  • ROW=Anzahl der Zeilen
  • COLUMN=Anzahl der Spalten
  • POSITION= Position des Diagramms, das Sie zeichnen

Beispiele

`fig.add_subplot(111)` #There is only one subplot or graph  
`fig.add_subplot(211)`  *and*  `fig.add_subplot(212)` 

Es gibt insgesamt 2 Zeilen, 1 Spalte, daher können 2 Unterdiagramme gezeichnet werden. Sein Standort ist 1. Es gibt insgesamt 2 Zeilen, 1 Spalte, daher können 2 Unterdiagramme gezeichnet werden. Seine Position ist die 2

Das add_subplot() Methode hat mehrere Aufrufsignaturen:

  1. add_subplot(nrows, ncols, index, **kwargs)
  2. add_subplot(pos, **kwargs)
  3. add_subplot(ax)
  4. add_subplot() <-- seit 3.1.0

Anrufe 1 und 2:

Die Aufrufe 1 und 2 erreichen dasselbe (bis zu einer Grenze, die unten erklärt wird). Stellen Sie sich vor, Sie geben zuerst das Rasterlayout mit ihren an ersten 2 Zahlen (2×2, 1×8, 3×4 usw.), z. B.:

f.add_subplot(3,4,1) 
# is equivalent to:
f.add_subplot(341)

Beide erzeugen eine Subplot-Anordnung von (3 x 4 = 12) Subplots in 3 Zeilen und 4 Spalten. Das dritte Zahl gibt bei jedem Aufruf an, ab welchem ​​Achsenobjekt zurückgegeben werden soll 1 oben links, nach rechts zunehmend.

Dieser Code veranschaulicht die Einschränkungen bei der Verwendung von Aufruf 2:

#!/usr/bin/env python3
import matplotlib.pyplot as plt

def plot_and_text(axis, text):
  '''Simple function to add a straight line
  and text to an axis object'''
  axis.plot([0,1],[0,1])
  axis.text(0.02, 0.9, text)

f = plt.figure()
f2 = plt.figure()

_max = 12
for i in range(_max):
  axis = f.add_subplot(3,4,i+1, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
  plot_and_text(axis,chr(i+97) + ') ' + '3,4,' +str(i+1))

  # If this check isn't in place, a 
  # ValueError: num must be 1 <= num <= 15, not 0 is raised
  if i < 9:
    axis = f2.add_subplot(341+i, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
    plot_and_text(axis,chr(i+97) + ') ' + str(341+i))

f.tight_layout()
f2.tight_layout()
plt.show()

Nebenhandlungen

Sie können mit sehen Rufen Sie 1 auf der linken Seite an Sie können jedes Achsenobjekt zurückgeben, jedoch mit Anruf 2 auf der RHS Sie können nur bis zu Index = 9 zurückgeben, wodurch die Subplots j), k) und l) mit diesem Aufruf unzugänglich werden.

Dh es veranschaulicht diesen Punkt aus der Dokumentation:

pos ist eine dreistellige Ganzzahl, wobei die erste Ziffer die Anzahl der Zeilen, die zweite die Anzahl der Spalten und die dritte den Index des Subplots angibt. dh fig.add_subplot(235) ist dasselbe wie fig.add_subplot(2, 3, 5). Beachten Sie, dass alle Ganzzahlen kleiner als 10 sein müssen, damit dieses Formular funktioniert.


Anruf 3

In seltenen Fällen kann add_subplot mit einem einzigen Argument aufgerufen werden, einer Subplot-Achseninstanz, die bereits in der vorliegenden Figur erstellt wurde, sich aber nicht in der Achsenliste der Figur befindet.


Aufruf 4 (seit 3.1.0):

Wenn keine Positionsargumente übergeben werden, ist der Standardwert (1, 1, 1).

dh Reproduzieren des Anrufs fig.add_subplot(111) in der Frage. Dies richtet im Wesentlichen ein 1 x 1-Raster von Subplots ein und gibt das erste (und einzige) Achsenobjekt im Raster zurück.

1399790cookie-checkWas bedeutet das Argument in fig.add_subplot(111)?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy