[python] 많은 예제가 Matplotlib / pyplot / python에서`fig, ax = plt.subplots ()`를 사용하는 이유

나는 matplotlib예제를 연구 하여 사용법 을 배우고 있으며 많은 예제는 단일 플롯을 만들기 전에 다음과 같은 줄을 포함하는 것 같습니다 …

fig, ax = plt.subplots()

여기 몇 가지 예가 있어요…

예제가 단일 차트를 작성하려고 시도 하더라도이 함수가 많이 사용되는 것을 볼 수 있습니다. 다른 장점이 있습니까? 공식 차트는 단일 차트를 만들 subplots()때도 사용 f, ax = subplots되며 그 이후의 도끼 만 참조합니다. 이것이 그들이 사용하는 코드입니다.

# Just a figure and one subplot
f, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')



답변

plt.subplots()은 figure 및 axes 객체를 포함하는 튜플을 반환하는 함수입니다. 따라서 사용하는 경우 fig, ax = plt.subplots()이 변수에이 튜플을 풀고 fig하고 ax. 갖는 것은 fig당신이 이미지 파일로 그림 이상 (예와 변화를 그림 수준의 속성 또는 저장하려는 경우에 유용합니다 fig.savefig('yourfilename.png')). 확실히 반환 된 그림 객체를 사용할 필요는 없지만 많은 사람들이 나중에 그것을 사용하므로 일반적입니다. 또한 모든 좌표축 객체 (플로팅 방법이있는 객체)에는 어쨌든 부모 도형 객체가 있습니다.

fig, ax = plt.subplots()

이보다 더 간결합니다.

fig = plt.figure()
ax = fig.add_subplot(111)


답변

여기에 보충제.

다음 질문은 그림에서 더 많은 하위 그림을 원한다면 어떻게해야합니까?

Doc에서 언급했듯이 fig = plt.subplots(nrows=2, ncols=2)하나의 Figure 객체에서 grid (2,2)를 사용 하여 서브 플로트 그룹을 설정하는 데 사용할 수 있습니다 .

우리가 알고 있듯이, fig, ax = plt.subplots()반환은 튜플을 반환합니다 fig, ax1, ax2, ax3, ax4 = plt.subplots(nrows=2, ncols=2). 먼저 시도해 봅시다 .

ValueError: not enough values to unpack (expected 4, got 2)

오류가 발생하지만 걱정할 필요가 없습니다. 이제 plt.subplots()실제로 두 요소가 포함 된 튜플을 반환 한다는 것을 알 수 있습니다. 첫 번째 개체는 그림 개체 여야하고 다른 하나는 하위 그림 개체 그룹이어야합니다.

다시 시도해 봅시다.

fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(nrows=2, ncols=2)

유형을 확인하십시오.

type(fig) #<class 'matplotlib.figure.Figure'>
type(ax1) #<class 'matplotlib.axes._subplots.AxesSubplot'>

물론 매개 변수를 (nrows = 1, ncols = 4)로 사용하는 경우 형식은 다음과 같아야합니다.

fig, [ax1, ax2, ax3, ax4] = plt.subplots(nrows=1, ncols=4)

따라서리스트 구성을 그림에서 설정 한 서브 플로트 그리드와 동일하게 유지하십시오.

이것이 당신에게 도움이되기를 바랍니다.


답변

질문에 대한 답변 위의 보충 교재로도 사이에는 중요한 차이가 plt.subplots()하고 plt.subplot(), 누락 된주의 사항 's'끝.

plt.subplots()모든 서브 플롯을 한 번에 만드는 데 사용할 수 있으며 서브 플롯의 그림과 축 (복수 축)을 튜플로 반환합니다. 그림은 스케치를 그리는 캔버스로 이해 될 수 있습니다.

# create a subplot with 2 rows and 1 columns
fig, ax = plt.subplots(2,1)

반면 plt.subplot()서브 플롯을 별도로 추가하려는 경우 사용할 수 있습니다 . 하나의 서브 플롯의 축만 반환합니다.

fig = plt.figure() # create the canvas for plotting
ax1 = plt.subplot(2,1,1)
# (2,1,1) indicates total number of rows, columns, and figure number respectively
ax2 = plt.subplot(2,1,2)

그러나 plt.subplots()전체 그림을 직접 사용자 정의하는 더 쉬운 옵션을 제공하기 때문에 선호됩니다.

# for example, sharing x-axis, y-axis for all subplots can be specified at once
fig, ax = plt.subplots(2,2, sharex=True, sharey=True)

공유 축
그러나을 사용하면 plt.subplot()번거로울 수있는 각 축마다 개별적으로 지정해야합니다.


답변

위의 답변 외에도 type(plt.subplots())튜플을 반환하고 압축을 풀 수없는 type(plt.subplot())반환 matplotlib.axes._subplots.AxesSubplot을 사용하여 객체 유형 을 확인할 수 있습니다.


답변