Matplotlib에서, 인수가 fig.add_subplot (111)의 의미는 무엇입니까?


472

때로는 다음과 같은 코드가 나타납니다.

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

어느 생산 :

포함 된 코드로 생성 된 예제 플롯

미친 것 같은 문서를 읽었지만에 대한 설명을 찾을 수 없습니다 111. 때때로 나는을 본다 212.

무슨 주장이 fig.add_subplot()의미 하는가?

답변:


470

이들은 단일 정수로 인코딩 된 서브 플롯 그리드 매개 변수입니다. 예를 들어 "111"은 "1x1 그리드, 첫 번째 서브 플롯"을 의미하고 "234"는 "2x3 그리드, 네 번째 서브 플롯"을 의미합니다.

의 대체 형식은 add_subplot(111)입니다 add_subplot(1, 1, 1).


18
이것에 대한 자세한 문서가 있습니까? 이 맥락에서 1x1 그리드와 2x3 그리드의 차이점은 무엇입니까?
donatello

19
1x1 격자 = 1 행, 1 열 2x3 격자 = 2 행, 3 열. 세 번째 숫자는 1부터 시작하여 행부터 증가합니다. 자세한 내용은 subplot () 설명서를 참조하십시오.
Christian Alis

18
다른 사람들이 설명했듯이 (2 년 이상 전에) 이것은 matlab의 유산입니다. 그러나 미래의 독자들을 위해 subplots()방법 의 형태로 더 나은 대안이 있다는 것을 알아야합니다 .
jarondl

26
기존의 문서가 subplot()있다 여기에subplots()있습니다 여기에 .
crayzeewulf

511

나는 이것이 다음 그림에서 가장 잘 설명 될 것이라고 생각합니다.

여기에 이미지 설명을 입력하십시오

위를 초기화하려면 다음을 입력하십시오.

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

19
쉼표가있는 버전은 3 자리 숫자가있는 버전보다 훨씬 직관적이고 읽기 쉽다고 생각합니다.
endolith

이것은 위의 예제와 같은 2x2 그리드 또는 4x4 그래프 그리드 등이 "그리드에 서브 플롯을 배치하는"방법을 보여줍니다. 그러나 누군가가 표시되는 그래프의 크기를 결정하는 것을 설명 할 수 있습니다. (2,2,1)의 기본값은 아주 작습니다.이 크기를 두 배 이상으로하고 싶습니다.
yoshiserry

7
이것은 매우 도움이됩니다. 이 사진은 정사각형 (2x2)이 아니라면 매우 유용합니다.
TravisJ

@TravisJ 와우, 우연의 일치! 나는 당신이 그것을 작성하기 한 시간 전쯤에 똑같은 것을 생각하고있었습니다! 곧 변경하겠습니다 :)
SaiyanGirl

7
매우 유용한 답변! 편집 내용이 정확하지 않다고 생각합니다. 1 : 2 또는 [1 3]과 같은 명령문으로 서브 플롯을 확장하는 동작은 Matplotlib에서 지원되지 않으며 (최소한에서는 지원되지 않음 1.5.0) Matlab에만있는 것 같습니다. ( matplotlib 에는이 동작을 수행하기위한 다른 옵션이 있습니다 (예 : gridspec ))
lab

39

Constantin의 대답은 바로 자리에 있지만 더 많은 배경을 위해이 동작은 Matlab에서 상속됩니다.

Matlab 동작은 Matlab 문서 의 그림 설정-그림 당 여러 플롯 표시 섹션에 설명되어 있습니다.

subplot (m, n, i)는 Figure 창을 작은 하위 플롯의 mxn 행렬로 나누고 현재 플롯에 대한 하위 플롯을 선택합니다. 플롯은 그림 창의 맨 위 행을 따라 번호가 매겨진 다음 두 번째 행 등으로 번호가 지정됩니다.


2
이것은 matlab이 아닌 matplotlib입니다.
dom0

45
matplotlibs 동작의 대부분은 Matlab에서 상속됩니다. Matlab 문서가 더 좋았 기 때문에이 특정 함수 호출의 작동 방식을 설명하는 데 도움이 될 것이라고 생각했습니다. 네, 맞습니다.이 (질문)은 matplotlib에 관한 것입니다. 하기 matplotlib의 부가 적 줄거리 문서는 내 의견으로는 덜 분명하다.
DaveTM

7
MATLAB 설명서 가 옮겨졌습니다 .
dotancohen

20

내 해결책은

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

1과 3이 병합 된 2x2 그리드


15

여기에 이미지 설명을 입력하십시오

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)

첫 번째 코드는 3 개의 행과 2 개의 열이있는 레이아웃에서 첫 번째 서브 플롯을 만듭니다.

첫 번째 열에있는 세 개의 그래프는 세 개의 행을 나타냅니다. 두 번째 플롯은 같은 열의 첫 번째 플롯 바로 아래에옵니다.

마지막 두 플롯에는 두 (2, 2)번째 열에 두 개의 행만 있고 위치 매개 변수는 행 단위로 이동한다는 것을 나타내는 인수 가 있습니다.


10

fig.add_subplot(ROW,COLUMN,POSITION)

  • ROW = 행 수
  • COLUMN = 열 수
  • POSITION = 플로팅 할 그래프의 위치

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

총 2 개의 행, 1 개의 열이 있으므로 2 개의 하위 그래프를 그릴 수 있습니다. 위치는 1입니다. 총 2 개의 행, 1 개의 열이 있으므로 2 개의 하위 그래프를 그릴 수 있습니다.


2

add_subplot () 방법은 여러 호출 서명이 있습니다 :

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

1 번과 2 번에 전화

호출 1과 2는 서로 같은 것을 달성합니다 (한도까지 아래 설명). 처음 2 개의 숫자 (2x2, 1x8, 3x4 등)로 그리드 레이아웃을 지정하는 것으로 생각하십시오 . 예 :

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

둘 다 3 개의 행과 4 개의 열로 (3 x 4 = 12) 서브 플롯의 서브 플롯 배열을 생성합니다. 각 호출 의 세 번째 숫자왼쪽 위에서 1 부터 시작 하여 오른쪽으로 증가하는 반환 할 축 객체를 나타냅니다 .

이 코드는 호출 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()

서브 플로트

당신이 함께 볼 수있는 좌변에 전화 (1) 그러나, 당신은 어떤 축 개체를 반환 할 수 있습니다 우변에 호출 2 ) 만 인덱스 = 9 렌더링 줄거리의 J), K까지 반환 할 수 있습니다, 및 L) 액세스이 호출을 사용하여.

, 설명서 에서이 점 을 보여줍니다.

pos는 3 자리 정수이며, 첫 번째 숫자는 행 수, 두 번째는 열 수, 세 번째는 서브 플롯의 인덱스입니다. 즉 fig.add_subplot (235)는 fig.add_subplot (2, 3, 5)와 동일합니다. 이 형식이 작동하려면 모든 정수가 10보다 작아야합니다 .


전화 3

드문 경우지만 add_subplot은 현재 그림에서 이미 생성되었지만 그림의 축 목록에는없는 서브 플롯 축 인스턴스 인 단일 인수로 호출 될 수 있습니다.


전화 4 (3.1.0부터) :

위치 인수가 전달되지 않으면 기본값은 (1, 1, 1)입니다.

즉, fig.add_subplot(111)질문 에서 전화 를 재생성합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.