파이썬(Python)/matplotlib

[Python, matplotlib] 여러 그래프에 한 화면에 그리기 (subplot)

끄적끄적아무거나 2021. 10. 16. 10:09
반응형

 

목차

     

     

     

     


     

     

    [Python, matplotlib] 여러 그래프에 한 화면에 그리기 (subplot)

     

    이번 포스트의 주제는 크게 두가지로 진행됩니다.

     

     

    • 여러개의 서브 그래프(Subplot) 만들기
    • 2개 이상의 그래프를 한개의 화면에 나타내기 (Multiple plots in one graph)

     

    위 작업을 위한 핵심 모듈은 subplots 입니다. Syntax 는 아래와 같습니다.

     

     

    matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

     

     

    내부 속성에 대한 정의는 링크에서 확인하시면 됩니다. 하지만 일반적으로 사용하는 속성은 아래 예제 코드를 통해 충분히 인지 할 수 있습니다.

     

     

     

     

    여러개의 서브 그래프(Subplot) 만들기 예제

     

     

    예제 코드1>>

    import matplotlib.pyplot as plt
    import random
    
    x = [0, 1, 2, 3]
    #임의의 y값 넣기
    y = []
    for _ in range(4):
        y.append(random.randrange(0,10))
    
    plt.subplot(1, 2, 1)
    plt.plot(x,y)
    plt.title("Plot1")
    
    #임의의 y값 넣기
    y = []
    for _ in range(4):
        y.append(random.randrange(0,10))
    
    plt.subplot(1, 2, 2)
    plt.plot(x,y)
    plt.title("Plot2")
    
    plt.show()

     

    결과>>

     

    주석>>

    plt.subplot(1, 2, 1)

     

    위 문장만 이해하면 됩니다. subplot 구성을 1행 2열의 테이블 형태를 구성하겠다는 뜻이고 마지막 1은 해당 subplot은 1행 1열에 위치하겠다는 의미입니다.

     

     

     

    예제 코드2>>

    import matplotlib.pyplot as plt
    import random
    
    x = [0, 1, 2, 3]
    #임의의 y값 넣기
    y = []
    for _ in range(4):
        y.append(random.randrange(0,10))
    
    plt.subplot(2, 1, 1)
    plt.plot(x,y)
    plt.title("Plot1")
    
    #임의의 y값 넣기
    y = []
    for _ in range(4):
        y.append(random.randrange(0,10))
    
    plt.subplot(2, 1, 2)
    plt.plot(x,y)
    plt.title("Plot2")
    
    plt.show()

     

     

    결과>>

     

     

    주석>> 

    이번에는 subplot을 1행2열로 변경하였기 때문에 위와 같은 결과가 나왔습니다.

     

     

     

     

    2개 이상의 그래프를 한개의 화면에 나타내기 (Multiple plots in one graph)

     

    예제 코드>>

    import matplotlib.pyplot as plt
    import random
    
    x = [0, 1, 2, 3]
    #임의의 y값 넣기
    y = []
    for _ in range(4):
        y.append(random.randrange(0,10))
    
    fig, ax1 = plt.subplots()
    ax1.plot(x, y, color="red")
    ax1.tick_params(axis='y', labelcolor="red")
    
    
    #임의의 y값 넣기
    y = []
    for _ in range(4):
        y.append(random.randrange(0,10))
    
    ax2 = ax1.twinx() #한 그래프에 두번째 plot 넣기
    ax2.plot(x, y, color="blue")
    ax2.tick_params(axis='y', labelcolor="blue")
    
    plt.show()

     

    결과>>

     

     

    주석>>

    첫번째 plot을 subplot으로 선언하고 그 뒤 추가할 plot에 대해 twinx 함수로 동일 x 축을 공유하는 그래프를 만들 수 있었다. 

     

     

     

     

    반응형