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.