[PYTHON] matplotlib에서 subplots 사이의 간격을 제거하는 방법?
PYTHONmatplotlib에서 subplots 사이의 간격을 제거하는 방법?
아래의 코드는 서브 도표 사이에 간격을 만듭니다. 하위 그림 사이의 틈을 제거하고 이미지를 꽉 찬 눈금으로 만드는 방법은 무엇입니까?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
해결법
-
==============================
1.gridspec을 사용하여 축 사이의 간격을 제어 할 수 있습니다. 여기에 더 많은 정보가 있습니다.
gridspec을 사용하여 축 사이의 간격을 제어 할 수 있습니다. 여기에 더 많은 정보가 있습니다.
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec plt.figure(figsize = (4,4)) gs1 = gridspec.GridSpec(4, 4) gs1.update(wspace=0.025, hspace=0.05) # set the spacing between axes. for i in range(16): # i = i + 1 # grid spec indexes from 0 ax1 = plt.subplot(gs1[i]) plt.axis('on') ax1.set_xticklabels([]) ax1.set_yticklabels([]) ax1.set_aspect('equal') plt.subp plt.show()
-
==============================
2.문제는 aspect = 'equal'을 사용하여 부 그림이 임의의 종횡비로 늘어나지 않고 모든 빈 공간을 채우지 못하게하는 것입니다.
문제는 aspect = 'equal'을 사용하여 부 그림이 임의의 종횡비로 늘어나지 않고 모든 빈 공간을 채우지 못하게하는 것입니다.
일반적으로 다음과 같이 작동합니다.
import matplotlib.pyplot as plt ax = [plt.subplot(2,2,i+1) for i in range(4)] for a in ax: a.set_xticklabels([]) a.set_yticklabels([]) plt.subplots_adjust(wspace=0, hspace=0)
결과는 다음과 같습니다.
그러나 다음 코드와 같이 aspect = 'equal'을 사용합니다.
import matplotlib.pyplot as plt ax = [plt.subplot(2,2,i+1) for i in range(4)] for a in ax: a.set_xticklabels([]) a.set_yticklabels([]) a.set_aspect('equal') plt.subplots_adjust(wspace=0, hspace=0)
이것이 우리가 얻는 것입니다 :
이 두 번째 경우의 차이점은 x 축과 y 축이 같은 수의 단위 / 픽셀을 갖도록 강요 한 것입니다. 기본적으로 축이 0에서 1로 변경되므로 aspect = 'equal'을 사용하면 각 축이 정사각형이됩니다. 숫자가 정사각형이 아니므로, 파이롯트는 축 사이에 여분의 간격을 가로로 추가합니다.
이 문제를 해결하기 위해 그림을 올바른 가로 세로 비율로 설정할 수 있습니다. 여기서는 객체 지향 pyplot 인터페이스를 사용하려고합니다. 일반적으로 우수하다고 생각합니다.
import matplotlib.pyplot as plt fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio ax = [fig.add_subplot(2,2,i+1) for i in range(4)] for a in ax: a.set_xticklabels([]) a.set_yticklabels([]) a.set_aspect('equal') fig.subplots_adjust(wspace=0, hspace=0)
결과는 다음과 같습니다.
-
==============================
3.gridspec 전체를 사용하지 않고 wspace 및 hspace를 0으로 설정하여 다음을 사용하여 간격을 제거 할 수도 있습니다.
gridspec 전체를 사용하지 않고 wspace 및 hspace를 0으로 설정하여 다음을 사용하여 간격을 제거 할 수도 있습니다.
import matplotlib.pyplot as plt plt.clf() f, axarr = plt.subplots(4, 4, gridspec_kw = {'wspace':0, 'hspace':0}) for i, ax in enumerate(f.axes): ax.grid('on', linestyle='--') ax.set_xticklabels([]) ax.set_yticklabels([]) plt.show() plt.close()
를 야기하는:
-
==============================
4.plt.tight_layout ()을 시도 했습니까?
plt.tight_layout ()을 시도 했습니까?
plt.tight_layout ()과 함께 그것없이 :
또는 : 이와 비슷한 것 (add_axes 사용)
left=[0.1,0.3,0.5,0.7] width=[0.2,0.2, 0.2, 0.2] rectLS=[] for x in left: for y in left: rectLS.append([x, y, 0.2, 0.2]) axLS=[] fig=plt.figure() axLS.append(fig.add_axes(rectLS[0])) for i in [1,2,3]: axLS.append(fig.add_axes(rectLS[i],sharey=axLS[-1])) axLS.append(fig.add_axes(rectLS[4])) for i in [1,2,3]: axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1])) axLS.append(fig.add_axes(rectLS[8])) for i in [5,6,7]: axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1])) axLS.append(fig.add_axes(rectLS[12])) for i in [9,10,11]: axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1]))
축을 공유 할 필요가 없다면 간단히 axLS = map (fig.add_axes, rectLS)
from https://stackoverflow.com/questions/20057260/how-to-remove-gaps-between-subplots-in-matplotlib by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] numpy 배열에서 특정 요소를 제거하는 방법 (0) | 2018.10.10 |
---|---|
[PYTHON] Word 2007 .docx 파일에서 단어를 검색하려면 어떻게해야합니까? (0) | 2018.10.10 |
[PYTHON] 최대 재시도 횟수가 URL 초과했습니다. (0) | 2018.10.10 |
[PYTHON] 파이썬 하위 프로세스 통신 방법을 사용할 때 종료 코드를 얻는 방법은 무엇입니까? (0) | 2018.10.10 |
[PYTHON] cx_freeze를 사용할 때 다른 파일을 어떻게 묶을 수 있습니까? (0) | 2018.10.10 |