[python] matplotlib에서 여러 하위 플롯을 얻는 방법은 무엇입니까?

이 코드의 작동 방식에 대해 약간 혼란스러워합니다.

fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()

이 경우 무화과 축은 어떻게 작동합니까? 무엇을합니까?

또한 왜이 작업이 같은 일을하지 않습니까?

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)



답변

여러 가지 방법이 있습니다. 이 subplots방법은 하위 그림과 함께 그림을 만든 다음 ax배열에 저장합니다 . 예를 들면 다음과 같습니다.

import matplotlib.pyplot as plt

x = range(10)
y = range(10)

fig, ax = plt.subplots(nrows=2, ncols=2)

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

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

그러나 이런 식으로도 효과가있을 것입니다. 서브 플롯으로 그림을 만든 다음 그 위에 추가하기 때문에 “깨끗하지 않습니다”.

fig = plt.figure()

plt.subplot(2, 2, 1)
plt.plot(x, y)

plt.subplot(2, 2, 2)
plt.plot(x, y)

plt.subplot(2, 2, 3)
plt.plot(x, y)

plt.subplot(2, 2, 4)
plt.plot(x, y)

plt.show()

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


답변

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

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


답변

  • 서브 플롯 호출에서 축을 언팩 할 수도 있습니다

  • 그리고 서브 플로트간에 x 및 y 축을 공유할지 여부를 설정하십시오.

이처럼 :

import matplotlib.pyplot as plt
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()

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


답변

matplotlib 버전 2.1부터 질문의 두 번째 코드도 잘 작동한다는 사실에 관심이있을 수 있습니다.

로부터 변경 로그 :

이제 Figure 클래스에 서브 플로트 메소드가 있음 이제 Figure 클래스에 pyplot.subplots ()와 동일하지만 기존 Figure에서 동작하는 subplots () 메소드가 있습니다.

예:

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

plt.show()


답변

matplotlib.pyplot.subplots 문서를 읽으십시오.

pyplot.subplots()fig, ax표기법을 사용하여 두 변수로 압축이 풀린 튜플 을 반환합니다.

fig, axes = plt.subplots(nrows=2, ncols=2)

코드

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

개체의 멤버가 아닌 subplots()함수 이기 때문에 작동하지 않습니다 .pyplotFigure


답변