파이썬(Python)/matplotlib

[Python]Matplotlib 그래프 그리기 팁(사이즈, subplot, 주석

끄적끄적아무거나 2022. 3. 4. 08:34
반응형

 

목차

     

     

     

     

    파이썬 matplotlib을 사용하기 위해서는 pip install matplotlib으로 설치를 우선 진행하여야 합니다. 아래는 matplotlib을 효과적으로 사용하기 위한 팁과 트릭입니다. 

     

     

    Plot 크기 조절하기

    plot의 크기는 figure의 figsize로 x축과 y축 사이즈를 결정 합니다.

     

    예제 코드>>

    import matplotlib.pyplot as plt
    import random
    
    fig=plt.figure(figsize=(4,4))
    
    x=list(range(10))
    y=[random.random() for _ in x]
    
    print(x)
    print(y)
    
    plt.title("graph title")
    plt.xlabel('x-axis')
    plt.ylabel('y-axis')
    
    plt.plot(x,y)
    plt.show()

    4번 라인: figsize에서 plot 크기를 4x4로 결정

    6~7번 라인: x,y 값을 range와 random으로 만듦

     

     

    결과>>

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0.602125542570519, 0.06884715573508371, 0.2651144730359227, 0.9700882816712, 0.4888852305365847, 0.7845484771995707, 0.47735963601428577, 0.3086238697362518, 0.37083225267670483, 0.527397344954864]

     

     

     

     

     

     

    Subplot 만들기

     

    subplot은 한 화면에 아래 위로 2개의 그래프를 놓거나 왼쪽 오른쪽으로 배치하는 등 바둑판처럼 배치가 가능 합니다. 구현은 subplot 함수를 통해 실행 가능 합니다. 

     

     

    예제 코드>>

    import matplotlib.pyplot as plt
    import random
    
    fig=plt.figure(figsize=(8,8))
    
    x=list(range(10))
    y=[random.random() for _ in x]
    
    ax1=plt.subplot(2,1,1)
    ax1.plot(x,y)
    ax1.set_title('subplot #1')
    
    x=list(range(10))
    y=[random.random() for _ in x]
    
    ax2=plt.subplot(2,1,2)
    ax2.plot(x,y)
    ax2.set_title('subplot #2')
    
    plt.show()

    9, 16번 라인: subplot 함수로 추가 그래프를 만듭니다. 3개의 인자가 들어가는데 첫번째는 행(Row) 개수, 두번째는 열(Column) 개수, 세번째는 Index 번호 입니다.

     

     

    결과>>

     

     

     

     

     

     

     

    주석 넣기 : text 함수

     

    바 그래프에 text 함수를 사용해서 Bar의 값을 알려주는 주석(지표) 값을 넣어 보겠습니다. 

     

    예제 코드>>

    import matplotlib.pyplot as plt
    import random
    
    fig=plt.figure(figsize=(4,6))
    
    x=list(range(3))
    y=[random.randint(0,100) for _ in x]
    y_bar=plt.bar(x, y, color='green')
    
    for bar, grade in zip(y_bar,y):
        plt.text(bar.get_x() + bar.get_width()/2.0,bar.get_height(),"{} Points".format(grade), ha='center', va='bottom')
    
    plt.xticks(x,["math", "english", "science"])
    plt.title("Grades")
    
    plt.show()

    8번 라인: bar 로 그래프를 만들고 return 값을 y_bar에 저장합니다. 

    10번 라인: y_bar와 y 값을 zip으로 묶어서 bar, grade에 각 각 넣어 줍니다.

    11번 라인: bar 사이즈 정보를 근거로 주석의 위치를 선정 합니다. 위치 다음에는 입력할 값 정보를 넣습니다.

     

     

    결과>>

     

     

     

     

     

    주석 넣기 : annotate 함수

     

    이번 예제는 annotate 함수를 사용해서 주석을 넣는 방법에 대해 알아 보겠습니다.

     

    예제 코드>>

    import matplotlib.pyplot as plt
    import numpy as np
    
    ax = plt.subplot()
    
    t = np.arange(0.0, 5.0, 0.01)
    s = np.cos(2*np.pi*t)
    line, = plt.plot(t, s, lw=2)
    
    # plt.annotate('max', xy=(2, 1), arrowprops=dict(arrowstyle='->'),xytext=(2.5,1.5))
    plt.annotate('max', xy=(2, 1), arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=-.2'),xytext=(2.5,1.5))
    # plt.annotate('max', xy=(2, 1), arrowprops=dict(arrowstyle='-|>',connectionstyle='angle,angleA=0,angleB=90'),xytext=(2.5,1.5))
    
    plt.ylim(-2, 2)
    plt.show()

     

    11번 라인: annotate 함수로 그래프에 설명 주석을 넣습니다. 첫번째 인자는 주석(comment) 값이고 다음은 주석을 찍을 위치 x, y 좌표입니다. arrowprops에서 화살표에 대한 성질을 정의 합니다. 10, 12번 라인에 다른 특징의 화살표가 있으니 직접 사용해 보시면 간단하게 이해할 수 있습니다.

     

    결과>>

     

     

     

    반응형