본문 바로가기
공부 목록/IT & 프로그래밍

python 그래프 여백 조정을 위한 subplots_adjust() 함수 사용

by 독학박사 2023. 7. 23.

목차


    python으로 데이터 분석을 위해 그래프를 그리는 일이 많습니다. 간혹 그래프를 그리다 보면 subplot 간의 사이가 너무 좁아 그래프 제목이 잘리는 현상을 많이 경험하게 됩니다. 또한, 그래프의 좌, 우, 상, 하 여백이 생각한 것보다 많거나 적어서 조정하고 싶을 때가 있습니다. 이럴 때 사용하는 plt.subplots_adjust() 함수가 있습니다. 어떻게 사용하는지 확인해 보겠습니다.

     

     

    파이썬 그래프 여백 조정
    파이썬 그래프 여백 조정

     

    1. subplots_adjust()는 어떤 경우에 사용하는가?

    여러 개의 서브플롯을 포함하는 그래프 레이아웃을 조정할 때 사용합니다. 여러 개의 서브플롯을 하나의 그래프에 배치하거나 할 때 서브플롯 간의 간격을 조절해 줄 수 있습니다.

     

     축 레이블과 제목 등을 고려하여 그래프를 조정할 때도 사용할 수 있습니다. 그래프를 그리고 축 레이블, 제목 등의 추가적인 요소를 포함하는 경우 간격이 좁아 레이블이나 제목 등을 넣지 못하는 경우 여백의 크기를 넓혀 줍니다.

     

     그래프를 그릴 때 그래프 요소가 잘리는 경우가 발생하곤 합니다. 그래프 요소들이 출력 영역을 벗어나거나 잘려 보이는 경우 해당 함수를 사용하여 그래프를 조정하여 요소들이 잘 보이도록 할 수 있습니다.

     

     출력 장치에 따른 크기 조정을 할 때도 여백 조정이 필요할 수 있습니다. 그래프를 화면이나 인쇄물 등 다양한 출력 장치에 맞게 크기를 조정해야 할 경우 subplots_adjust() 함수를 활용하여 적절한 크기로 조정할 수 있습니다.

     

     

    2. subplots_adjust() 함수 사용법

    함수의 기본 사용 포맷은 아래와 같습니다. 특정 인자 값을 넣지 않으면 해당 함수를 사용했을 때와 사용하지 않았을 때의 결과는 같습니다.

     

    plt.subplots_adjust(left=None, right=None, bottom=None, top=None, wspace=None, hspace=None)

     

     

    인자의 값에 대한 설명을 잘 확인해야 합니다. left의 경우 왼쪽 여백을 지정하는데, 1의 값을 넣으면 오른쪽 끝을 의미한다고 합니다. 하지만 1을 넣으면 에러가 발생합니다. 넣을 이유도 없고요. 0, 0.1, 0.2 순으로 여백이 늘어나게 됩니다. 반대로 오른쪽의 여백은 1, 0.9, 0.8 순으로 여백이 커지게 됩니다.

     

    bottom과 top의 경우도 left와 right처럼 인자의 값을 이해해야 합니다. 아래쪽이 0, 위쪽이 1로 되어 있기 때문에 bottom은 0.0, 0.1 순으로 커지고, top은 1, 0.9 순으로 커지게 됩니다.

     

    left: 그래프의 왼쪽 여백을 지정합니다. 기본값은 None으로, 여백을 조정하지 않습니다. 0부터 1 사이의 값으로 설정하며, 0은 왼쪽 끝, 1은 오른쪽 끝을 의미합니다.

    right: 그래프의 오른쪽 여백을 지정합니다. 기본값은 None으로, 여백을 조정하지 않습니다. 0부터 1 사이의 값으로 설정하며, 0은 왼쪽 끝, 1은 오른쪽 끝을 의미합니다.

    bottom: 그래프의 아래쪽 여백을 지정합니다. 기본값은 None으로, 여백을 조정하지 않습니다. 0부터 1 사이의 값으로 설정하며, 0은 아래쪽 끝, 1은 위쪽 끝을 의미합니다.

    top: 그래프의 위쪽 여백을 지정합니다. 기본값은 None으로, 여백을 조정하지 않습니다. 0부터 1 사이의 값으로 설정하며, 0은 아래쪽 끝, 1은 위쪽 끝을 의미합니다.

    wspace: 서브플롯들 사이의 가로 공간을 지정합니다. 기본값은 None으로, 여백을 조정하지 않습니다. 서브플롯들 사이의 간격을 조절할 때 사용합니다. 일반적으로 0부터 1 사이의 값으로 설정하며, 0은 가로로 서브플롯들이 붙어있음을 의미하고, 1은 최대 간격을 의미합니다.

    hspace: 서브플롯들 사이의 세로 공간을 지정합니다. 기본값은 None으로, 여백을 조정하지 않습니다. 서브플롯들 사이의 간격을 조절할 때 사용합니다. 일반적으로 0부터 1 사이의 값으로 설정하며, 0은 세로로 서브플롯들이 붙어있음을 의미하고, 1은 최대 간격을 의미합니다.

     

     

    해당 함수는 vscode나 주피터와 같은 interpreter 창에서는 그 변화를 확실하게 느낄 수 없습니다. backend를 사용하여 새로운 창에 그래프를 그리거나 셀 단위의 실행이 아닌 전체 코드 실행 시 나오는 신규 창의 그래프에서 함수의 영향을 확인할 수 있습니다.

     

     

    3. subplots_adjust() 함수 사용 예제

    아래의 예제 코드는 2X2의 subplot을 갖는 하나의 그래프 창을 생성하게 됩니다. 각 subplot 간의 간격이나 그래프 창의 좌우 상하의 여백을 확인해 보도록 하겠습니다. 아래 코드에서 subplots_adjust() 인자값은 최적의 값을 넣은 것이며 결과에 대해서는 각 인자값을 변경한 형태를 보여드리겠습니다.

     

    import matplotlib.pyplot as plt
    
    # 2x2 형태의 서브플롯을 생성합니다.
    fig, axs = plt.subplots(2, 2)
    
    # 각 서브플롯에 데이터를 플롯합니다.
    axs[0, 0].plot([1, 2, 3], [1, 2, 3], label='Subplot 1')
    axs[0, 1].plot([1, 2, 3], [3, 2, 1], label='Subplot 2')
    axs[1, 0].plot([1, 2, 3], [2, 1, 3], label='Subplot 3')
    axs[1, 1].plot([1, 2, 3], [1, 3, 2], label='Subplot 4')
    
    # 각 서브플롯에 라벨과 범례를 추가합니다.
    for i in range(2):
        for j in range(2):
            axs[i, j].set_xlabel('X-axis')
            axs[i, j].set_ylabel('Y-axis')
            axs[i, j].legend()
    
    # subplots_adjust() 함수를 사용하여 여백과 서브플롯 간격을 조정합니다.
    plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.4, hspace=0.4)
    
    # 그래프를 화면에 표시합니다.
    plt.show()

     

     plt.subpltos_adjust() 함수를 사용하지 않는 경우나 어떠한 인자도 넣지 않은 그래프는 동일한 형태가 됩니다.

     

    subplots_adjust() 사용 여부에 따른 그래프 창
    subplots_adjust() 사용 여부에 따른 그래프 창

     

    위의 예제코드의 인자값들이 반영된 그래프 창은 아래와 같습니다.

     

    인자값 반영된 그래프 창
    0.1, 0.9, 0.1, 0.9, 0.4, 0.4 값 반영

     

    다양한 값을 넣었을 때 어떻게 그래프 창이 변화되는지 확인해 보겠습니다. 

     

    다양한 인자값에 따른 그래프 창 결과물
    다양한 인자값에 따른 그래프 창 결과물

     

     

    4. 마치며

     python에서 그래프를 만들 때 maplotlib 라이브러리를 사용하는데, 그래프의 제목이나 범례들이 여백의 크기 때문에 잘 안 보이는 경우가 생길 수 있습니다. 이럴 경우에는 plt.subplots_adjust()를 사용하여 그래프의 여백을 원하는 방향으로 조정할 수 있습니다. 각 인자의 값이 어떤 식으로 적용되는지 이해를 하고 있다면 최적의 그래프 창을 만들 수 있을 겁니다.