복붙노트

[PYTHON] matplotlib에서 subplots 사이의 간격을 제거하는 방법?

PYTHON

matplotlib에서 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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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)

  5. from https://stackoverflow.com/questions/20057260/how-to-remove-gaps-between-subplots-in-matplotlib by cc-by-sa and MIT license