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

파이썬 matplotlib에서 그래프 이중 축 설정하기

by 독학박사 2023. 8. 12.

목차


     데이터 가시화를 하다 보면 두 개의 데이터 종류를 같이 나타내야 할 경우가 생깁니다. 하지만 데이터의 스케일이 너무도 크게 차이가 나면 작은 스케일의 데이터는 확인하기 어렵게 되는 문제가 발생합니다. 이를 위해 그래프에서 이중 축을 설정해줘야 하는데 일반적인 방식으로는 설정이 어렵습니다. 이번 글에서는 파이썬에서 그래프 가시화 시 이중 축 설정하는 방법에 대해서 정리해 보겠습니다.

     

     

    파이썬 이중 축 설정하기
    파이썬 이중 축 설정하기

     

    1. 그래프 그리기 설정

     파이썬에서 그래프를 그리는 방법에는 몇 가지 방식이 존재합니다. 함수를 이용한 그래프 그리기와 객체를 이용한 그래프 그리기가 있습니다. 두 가지 방식을 간단하게 표현하자면 아래와 같습니다.

     

    함수형
    plt.figure()
    plt.plot()
    plt.show()

    객체형
    fig = plt.figure()
    ax = fig.add_subplot()
    ax.plot()
    plt.show()

     

     두 방식에 대해 자세한 내용은 맨 아래 링크를 통해 확인할 수 있습니다. 여기서 이러한 방식을 간단하게나마 설명하는 이유로 이중 축을 설정하기 위해서는 객체형으로 그래프를 그려야 하기 때문입니다.

     

     

    2. Figure와 Axes의 개념

     Matplotlib를 사용하여 그래프를 생성하고 다양한 요소를 제어할 때, Figure와 Axes는 중요한 개념입니다. 이들은 Matplotlib의 구성 요소로써 그래프를 구성하고 다루는 데 사용됩니다. figure와 axes에 대해 다음과 같이 정리합니다.

     

    Figure:

    Figure는 그래프의 전체적인 레이아웃과 배치를 관리하는 컨테이너입니다. 하나의 Figure 객체에는 하나 이상의 Axes 객체가 포함될 수 있습니다. 말 그대로 전체 그림의 "도화지"라고 생각할 수 있습니다.

     

     Figure는 그래프의 크기, 배경색 등을 조절하는 데 사용됩니다. 보통 그래프 하나를 생성할 때마다 하나의 Figure 객체를 사용합니다.

     

    Axes:

     Axes는 실제로 그래프 영역을 나타내며, 여기에 데이터를 플로팅 하고 여러 가지 요소를 추가하여 그래프를 꾸밀 수 있습니다. x 축, y 축, 데이터 포인트, 라벨, 제목 등을 관리하는 역할을 합니다.

     하나의 Figure 안에 여러 개의 Axes를 가질 수 있습니다. Axes 객체를 생성하고 관리하기 위해 subplot() 함수를 사용하거나 add_subplot() 메서드를 사용할 수 있습니다.

     

     

    3. ax1, ax2 정의하는 방법

     이중 축을 설정하기 위해서는 fig는 한 개 ax는 두 개를 만들어야 합니다. 일반적으로 알려진 방법으로는 fig를 정의하고 fig를 이용하여 ax1을 만든 후 ax1.twinx()로 ax1과 같은 x축을 갖는 ax2를 만드는 방법입니다.

     

    fig = plt.figure()
    ax1 = fig.add_subplot()
    ax2 = ax1.twinx()

     

     위의 과정을 조금 단축하기 위해서는 fig와 ax1을 동시에 정의하는 방법을 사용할 수 있습니다. 이때 주의할 점은 subplots()를 사용한다는 겁니다. 보통 add_subplot()과 혼동해서 subplot 다음에 's'를 빼먹는 경우가 많습니다.

     

    fig, ax1 = plt.subplots()
    ax2 = ax1.twinx()

     

     

    4. twinx() 함수란?

    'twinx()' 함수는 데이터 시각화를 위해 많이 사용되는 파이썬의 Matplotlib 라이브러리에서 제공되는 함수입니다. 이 함수는 하나의 그래프 위에 여러 개의 y 축을 가진 라인 플롯(axes)을 생성하는 데 사용됩니다. 주로 서로 다른 단위나 범위의 데이터를 동시에 비교하거나 표시할 때 유용합니다.

     

     이중 축을 만드는 중요한 요소에는 fig와 ax를 객체로 설정하는 것과 ax를 twinx()로 복제해 준다는 개념이 있습니다. 이를 위해 지금까지 객체와 선언 방법에 대해 차례대로 정리해 봤습니다.

     

     

    5. 데이터 이중 축 그리기 예제

     이제 지금까지 정리한 내용들을 이용하여 이중 축을 한 번 그려보도록 하겠습니다. 물론 두 데이터 셋의 스케일이 많이 차이가 나야 큰 효과를 볼 수 있습니다. 데이터 값이 비슷하데 굳이 이중 축을 그릴 필요는 없습니다.

     

    import matplotlib.pyplot as plt
    
    # 데이터 생성
    x = [1, 2, 3, 4, 5]
    y1 = [1, 1.5, 0.7, 1.2, 0.9]
    y2 = [200, 150, 180, 220, 190]
    
    # 첫 번째 y 축에 대한 라인 플롯 생성
    fig, ax1 = plt.subplots()
    ax1.plot(x, y1, 'go--')
    ax1.set_xlabel('X-axis')
    ax1.set_ylabel('Y1-axis', color='g')
    
    # 두 번째 y 축에 대한 라인 플롯 생성
    ax2 = ax1.twinx()  # 두 번째 y 축 생성
    ax2.plot(x, y2, 'bo-.')
    ax2.set_ylabel('Y2-axis', color='b')
    
    plt.title('Dual Y-axis Plot')
    plt.show()

     

     하나의 데이터는 1 근처의 분포를 갖고 있고 다른 하나는 200 부근의 값을 갖는 데이터 두 개의 세트를 하나의 그래프로 나타내 봤습니다.

    스케일이 다른 데이터 셋을 이중 축으로 표기
    스케일이 다른 데이터 셋을 이중 축으로 표기

     

     

    6. 마치며

     데이터의 스케일이 다른 두 개의 데이터 셋을 비교하거나 가시화하기 위해 이중 축을 설정이 필요할 수 있습니다. 이를 위해 그래프 초기 설정부터 twinx() 함수의 사용방법과 그래프 예제 코드를 통해 설명했습니다. 이번 글에서 설명한 글들 중 더 자세한 내용을 확인하고 싶다면 아래의 링크들을 참고하시기 바랍니다.

     

     

    함께 공부하는 도움이 되는 글들

     

    https://lifelong-education-dr-kim.tistory.com/entry/Matplotlib-모듈인-pyplot의-기본-함수-figure의-사용

     

    Matplotlib 모듈인 pyplot의 기본 함수 figure()의 사용

    파이썬으로 그래프를 그릴 때 기본적으로 사용하는 라이브러리로 matplotlib일 일반적입니다. plt.plot()이나, plot.scatter()와 같은 함수를 이용하여 그래프를 가시화하는데, 그전에 plt.figure()를 사용하

    lifelong-education-dr-kim.tistory.com

     

     

    https://lifelong-education-dr-kim.tistory.com/entry/pltplot에서-마커와-라인-속성-지정으로-그래프-형태-변경하기

     

    plt.plot()에서 마커와 라인 속성 지정으로 그래프 형태 변경하기

    파이썬에서 데이터를 가시화하기 위해 자주 사용하는 함수로 plt.plot()이 있습니다. 어떠한 옵션도 주지 않으면 단순하게 직선만을 표기해 주는 plt.plot() 함수 내에 데이터를 표시할 수 있는 마커

    lifelong-education-dr-kim.tistory.com