600 Stimmen

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

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

Das ergibt:

Example plot produced by the included code

Ich habe die Dokumentation wie verrückt durchgelesen, aber ich kann keine Erklärung für die 111 . manchmal sehe ich eine 212 .

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

21voto

compuphys Punkte 1078

Le site 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 Aufforderungen 1 und 2 bewirken dasselbe (bis zu einer bestimmten Grenze, die weiter unten erläutert wird). Stellen Sie sich vor, dass sie zuerst das Rasterlayout mit ihren die ersten 2 Zahlen (2x2, 1x8, 3x4, usw.), z.B:

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

Beide ergeben eine Teilflächenanordnung von (3 x 4 = 12) Teilflächen in 3 Zeilen und 4 Spalten. Die dritte Zahl in jedem Aufruf gibt an, welches Achsenobjekt zurückgegeben werden soll, beginnend mit 1 oben links, ansteigend nach rechts .

Dieser Code verdeutlicht die Grenzen 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()

subplots

Sie können sehen, mit Aufruf 1 auf der linken Seite können Sie ein beliebiges Achsenobjekt zurückgeben, aber mit Aufruf 2 auf der RHS können Sie nur bis zu index = 9 zurückkehren, so dass die Teilflächen j), k) und l) mit diesem Aufruf nicht zugänglich sind.

D.h. sie 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 Teilbildes angibt. d.h. fig.add_subplot(235) ist dasselbe wie fig.add_subplot(2, 3, 5). Beachten Sie, dass alle ganzen Zahlen kleiner als 10 sein müssen, damit diese Form funktioniert .


Aufruf 3

In seltenen Fällen kann add_subplot mit einem einzigen Argument aufgerufen werden, nämlich einer Instanz von Subplot-Achsen, die bereits in der aktuellen Abbildung erstellt wurde, aber nicht in der Liste der Achsen der Abbildung enthalten ist.


Aufruf 4 (seit 3.1.0):

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

d.h. die Wiedergabe des Aufrufs fig.add_subplot(111) in der Frage. Damit wird im Wesentlichen ein 1 x 1-Gitter von Teilflächen erstellt und das erste (und einzige) Achsenobjekt im Gitter zurückgegeben.

18voto

Rameez Ahmad Dar Punkte 711

fig.add_subplot(ROW,COLUMN,POSITION)

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

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 und 1 Spalte, daher können 2 Teilgraphen gezeichnet werden. Seine Position ist die 1. Es gibt insgesamt 2 Zeilen, 1 Spalte, daher können 2 Teilgraphen gezeichnet werden, deren Position die 2.

4voto

Mostafa Wael Punkte 883

fig.add_subplot(111) ist genau wie fig.add_subplot(1, 1, 1) die 111 sind nur die Parameter des Teilflächenrasters, jedoch als einzelne Ganzzahl kodiert.

Zur Auswahl der k-te Teilfläche in einem n*m-Gitter Sie tun dies: fig.add_subplot(n, m, k) .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X