matplotlib에서 빈 서브 플롯을 어떻게 만들 수 있습니까?


82

matplotlib에서 서브 플롯 그룹 (예 : 3 x 2)을 만들고 있지만 데이터 세트가 6 개 미만입니다. 나머지 서브 플롯은 어떻게 비워 둘 수 있습니까?

배열은 다음과 같습니다.

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+

이것은 여러 페이지에 대해 계속 될 수 있지만 마지막 페이지에는 예를 들어 2,1 상자에 대한 5 개의 데이터 세트가 비어 있습니다. 그러나 나는 그림을 다음과 같이 선언했습니다.

cfig,ax = plt.subplots(3,2)

따라서 서브 플롯 2,1의 공간에는 눈금과 레이블이있는 기본 축 집합이 있습니다. 어떻게 프로그래밍 방식으로 해당 공간을 비워두고 축없이 렌더링 할 수 있습니까?

답변:


138

필요하지 않은 축은 항상 숨길 수 있습니다. 예를 들어 다음 코드는 6 번째 축을 완전히 끕니다.

import matplotlib.pyplot as plt

hf, ha = plt.subplots(3,2)
ha[-1, -1].axis('off')

plt.show()

결과는 다음과 같습니다.

오른쪽 아래 셀에 렌더링 된 그래프가없는 3x2 그래프 격자 이미지

또는 축을 유지하지만 모든 축 장식 (예 : 눈금 및 레이블)을 숨기는 방법은 matplotlib 플롯에서 축 텍스트 숨기기 질문에 대한 허용 된 답변을 참조하십시오 .


고마워요-사실 내 원래 질문에 더 가깝습니다. 나는 이미 다른 대답을 받아들이고 그것을 사용하기 위해 내 코드를 수정했지만 두 가지 방법 모두 훌륭합니다.
mishaF

멋지다, 덜 add_subplot()혼란 스럽기 때문에 참으로 좋다 .
moooeeeep 2012

이것은 대단합니다!
FaCoffee

이것은 플롯을 보여주지 않으며 이것이 빈 플롯이라고 말할 수 있습니다. 데이터가 없음을 명시 적으로 보여주기 위해 데이터가없는 플롯을 찾고있었습니다. 이 답변을 쉽게 수정할 수 있습니까?
Zelphir Kaltstahl

@Zelphir 나는 당신이 무엇을 추구하고 있는지 잘 모르겠습니다. 다른 5 개의 플롯은 데이터가없는 빈 그래프이므로 추가로 무엇을 요구하는지 잘 모르겠습니다. 또한 이것은 새로운 질문입니다. 앞으로는 이전 답변에 대해 언급하지 말고 새로운 질문으로 질문하십시오.
Chris

26

훨씬 향상된 부가 적 줄거리 인터페이스는 이 질문에 첫번째 질문을 받았다부터하기 matplotlib 추가되었습니다. 여기에서 추가 항목을 숨기지 않고 필요한 서브 플롯을 정확하게 만들 수 있습니다. 또한 서브 플롯은 추가 행 또는 열에 걸쳐있을 수 있습니다.

import pylab as plt

ax1 = plt.subplot2grid((3,2),(0, 0))
ax2 = plt.subplot2grid((3,2),(0, 1))
ax3 = plt.subplot2grid((3,2),(1, 0))
ax4 = plt.subplot2grid((3,2),(1, 1))
ax5 = plt.subplot2grid((3,2),(2, 0))

plt.show()

여기에 이미지 설명 입력


와우-좋은 개선입니다. 훨씬 간단합니다! 감사합니다 @Hooked!
mishaF 2013 년

@Hooked, 그 마지막 공백은 범례를 추가하기에 완벽합니다. 거기에 전설을 설정하는 방법을 알고 있습니까?
Stefano

@Stefano 확인이이 일을하는 방법이 있습니다 - 그러나 이것은 가장 새로운 문제로 제기 될 것이다, 당신은 당신의 질문이 답을 링크도 있습니다 (BTW에 StackOverflow에 오신 것을 환영합니다!)
걸려

6

Axes.set_visible () 메서드를 사용하여 서브 플롯을 숨길 수도 있습니다.

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure()
data = pd.read_csv('sampledata.csv')

for i in range(0,6):
ax = fig.add_subplot(3,2,i+1)
ax.plot(range(1,6), data[i])
if i == 5:
    ax.set_visible(False)

귀하의 답변은 원래 Axes와 확장 GeoAxes 모두에 좋습니다!
Fei Yao 19

1

필요할 때 서브 플롯을 생성하는 옵션일까요?

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as plt

plt.figure()
plt.gcf().add_subplot(421)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(422)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(423)
plt.fill([0,0,1,1],[0,1,1,0])
plt.suptitle("Figure Title")
plt.gcf().subplots_adjust(hspace=0.5,wspace=0.5)
plt.savefig("outfig")

간결성을 위해 원래 질문에 포함하지 않은 다른 서식 지정 작업이 있기 때문에 그렇게 생각하지 않습니다. 이 중 하나는 plt.subplots_adjust (wspace = 0, hspace = 0)입니다. 나는 그것이 사실 후에 효과가 있을지 확신하지 못합니다.
mishaF

@mishaF :이 방법을 사용하여 subplots_adjust ()를 수행 할 수 있습니다. 내 편집을 참조하십시오.
moooeeeep
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.