In Matplotlib, wat betekent het argument in fig.add_subplot(111)?

Soms kom ik code tegen zoals deze:

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

Wat produceert:

Voorbeeldplot geproduceerd door de meegeleverde code

Ik heb de documentatie als een gek gelezen, maar ik kan geen verklaring vinden voor de 111. soms zie ik een 212.

Wat betekent het argument van fig.add_subplot()?


Antwoord 1, autoriteit 100%

Dit zijn subplot-rasterparameters die zijn gecodeerd als een enkel geheel getal. “111” betekent bijvoorbeeld “1×1 raster, eerste subplot” en “234” betekent “2×3 raster, 4e subplot”.

Alternatieve vorm voor add_subplot(111)is add_subplot(1, 1, 1).


Antwoord 2, autoriteit 91%

Ik denk dat dit het beste kan worden verklaard door de volgende afbeelding:

voer hier de afbeeldingsbeschrijving in

Om het bovenstaande te initialiseren, typt u:

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

Antwoord 3, autoriteit 9%

Het antwoord van Constantin is perfect, maar voor meer achtergrondinformatie is dit gedrag geërfd van Matlab.

Het gedrag van Matlab wordt uitgelegd in de Figuurconfiguratie – Meerdere plots per figuur weergevensectie van de Matlab-documentatie.

subplot(m,n,i) breekt het figuurvenster op in een m-by-n matrix van small
subplots en selecteert de ite subplot voor de huidige plot. de percelen
zijn genummerd langs de bovenste rij van het figuurvenster, dan de tweede
rij, enzovoort.


Antwoord 4, autoriteit 5%

Mijn oplossing is

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 raster met 1 en 3 samenvoegen


Antwoord 5, autoriteit 4%

voer hier de afbeeldingsbeschrijving in

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)

De eerste code creëert de eerste subplot in een lay-out met 3 rijen en 2 kolommen.

De drie grafieken in de eerste kolom geven de 3 rijen aan. De tweede plot komt net onder de eerste plot in dezelfde kolom, enzovoort.

De laatste twee plots hebben argumenten (2, 2)die aangeven dat de tweede kolom slechts twee rijen heeft, de positieparameters worden per rij verplaatst.


Antwoord 6, autoriteit 2%

fig.add_subplot(ROW,COLUMN,POSITION)

  • ROW=aantal rijen
  • COLUMN=aantal kolommen
  • POSITION= positie van de grafiek die u plot

Voorbeelden

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

Er zijn in totaal 2 rijen, 1 kolom, dus 2 subgrafieken kunnen worden geplot. De locatie is 1e. Er zijn in totaal 2 rijen, 1 kolom, dus 2 subgrafieken kunnen worden uitgezet. De locatie is 2e


Antwoord 7, autoriteit 2%

De add_subplot()methode heeft verschillende oproephandtekeningen:

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

Oproepen 1 en 2:

Oproepen 1 en 2 bereiken hetzelfde als elkaar (tot een limiet, hieronder uitgelegd). Zie ze als eerst de rasterlay-out specificeren met hun eerste 2 cijfers(2×2, 1×8, 3×4, enz.), bijvoorbeeld:

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

Beide produceren een subplot-rangschikking van (3 x 4 = 12) subplots in 3 rijen en 4 kolommen. Het derde getalin elke aanroep geeft aan welk asobject moet worden geretourneerd, beginnend bij 1 linksboven, oplopend naar rechts.

Deze code illustreert de beperkingen van het gebruik van oproep 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

Je kunt zien dat met call 1 op de LHSje elk asobject kunt retourneren, maar met call 2 op de RHSkun je alleen tot index = 9 teruggeven subplots j), k) en l) ontoegankelijk met deze oproep.

Het illustreert dit punt uit de documentatie:

pos is een geheel getal van drie cijfers, waarbij het eerste cijfer het aantal rijen is, het tweede het aantal kolommen en het derde de index van de subplot. d.w.z. fig.add_subplot(235) is hetzelfde als fig.add_subplot(2, 3, 5). Houd er rekening mee dat alle gehele getallen kleiner dan 10 moeten zijn om dit formulier te laten werken.


Bel 3

In zeldzame gevallen kan add_subplot worden aangeroepen met een enkel argument, een subplot-asseninstantie die al in de huidige afbeelding is gemaakt, maar niet in de lijst met assen van de afbeelding.


Bel 4 (sinds 3.1.0):

Als er geen positionele argumenten worden doorgegeven, wordt deze standaard ingesteld op (1, 1, 1).

d.w.z. het reproduceren van de aanroep fig.add_subplot(111)in de vraag. Dit stelt in wezen een 1 x 1 raster van subplots in en retourneert het eerste (en enige) asobject in het raster.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

16 + eleven =

Other episodes