[Python] Matplotlib 라이브러리 (Line, Bar, Histogram)

    Matplotlib

    Matplotlib 란?

    Matplotlib는 데이터 시각화와 그래프 플롯에 사용되는 Python 라이브러리입니다.
    Matplotlib을 이용하면 다양한 유형의 그래프를 간단하게 만들 수 있습니다.

    출처: matplotlib

    Matplotlib를 사용하려면 먼저 불러와야겠죠.
    pyplot이라는 모듈을 사용해야 합니다. 이 모듈은 MATLAB과 비슷하게 명령어 스타일로 동작하는 함수의 모음입니다.
    (matplotllib.pyplot 은 별칭으로 plt를 사용해요.)

    import matplotlib.pyplot as plt

    Line

    Line plot 그리기

    먼저 line plot을 그려볼게요.

    • .plot( ) - line plot을 그리는 함수
    import numpy as np
    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()             # 괄호 안이 비어 있으면 1개를 만듭니다.
    x = np.arange(15)
    y = x ** 2                           # 제곱
    ax.plot(
        x, y,                            # 변수
        linestyle=":",                   # line 의 style 정의 ( : 는 점선)
        marker="*",                      # marker 의 style 정의 ( * 는 별표)
        color='#524FA1'                  # color 정의 (RGB 16진수 조합)
    )
    
    plt.show()

    Line Style 다루기

    위에서 잠깐 소개한 것처럼 linestyle을 정의할 수 있어요.
    하나의 plot에 여러 line을 표기할 때 data 별로 구분하기 좋아요. 

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.arange(10)                 # 0 ~ 9
    fig, ax = plt.subplots()
    ax.plot(x, x, linestyle="-")      # solid     -
    ax.plot(x, x+1, linestyle="--")   # dashed    --
    ax.plot(x, x+2, linestyle="-.")   # dashdot   -.-
    ax.plot(x, x+3, linestyle=":")    # dotted    ..
    
    plt.show()

    Line color 다루기

    Line의 Color를 설정하는 옵션도 있어요.
    이때, Color를 선택하는 방법이 다양하니 코드를 통해서 확인해볼게요.

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.arange(10)
    fig, ax = plt.subplots()
    ax.plot(x, x, color="r")           # red
    ax.plot(x, x+2, color="green")     # green
    ax.plot(x, x+4, color="0.8")       # gray (0 ~ 1 사이값)
    ax.plot(x, x+6, color="#524FA1")   # pupple (RGB 16진수)
    
    plt.show()

    Line Marker 다루기

    이번엔 Line의 Marker를 설정하는 옵션을 볼게요

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.arange(10)
    fig, ax = plt.subplots()
    ax.plot(x, x, marker=".")       # dot
    ax.plot(x, x+2, marker="o")     # circle
    ax.plot(x, x+4, marker="v")     # tryangle
    ax.plot(x, x+6, marker="s")     # square
    ax.plot(x, x+8, marker="*")     # star
    
    plt.show()

    축 경계 조정하기

    축의 경계(범위)를 설정할 때는 아래와 같은 함수들을 사용해요

    • .set_xlim( , ) - x 축 경계 설정
    • .set_ylim( , ) - y 축 경계 설정
    • set_xlabel(" ") - x 축 라벨 표기
    • set_ylabel(" ") - y 축 라벨 표기
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(0, 10, 1000)       # start, end, step
    fig, ax = plt.subplots()
    
    ax.plot(x, np.sin(x))              # sin 함수 설정
    
    ax.set_xlim(-2, 12)                # x 축 경계 -2 ~ 12
    ax.set_ylim(-1.5, 1.5)             # y 축 경계 -1.5 ~ 1.5
    
    ax.set_xlabel("x_axis")            # x 축 Label
    ax.set_ylabel("y_axis")            # y 축 Label
    
    plt.show()

    범례

    지금까지 line의 style, color, marker 등을 변경했죠.
    하지만 각 선이 의미하는 것을 표현할 때는 범례가 가장 간단합니다.

    범례를 추가하려면 우선 plot을 정의할 때 label=' ' 옵션을 설정해야 합니다.
    그리고 .legend() 함수를 사용하면 됩니다.

    • .legend( )
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.arange(10)
    fig, ax = plt.subplots()
    ax.plot(x, x, label='y=x')
    ax.plot(x, x**2, label='y=x^2')
    
    ax.set_xlabel("x_axis")
    ax.set_ylabel("y_axis")
    
    ax.legend(loc='upper right',           # 범례위치
              shadow=True,                 # 그림자 효과
              fancybox=True,               # 모서리 둥글게 만드는 효과
              borderpad=2)                 # 범례를 표시한 패드의 크기
    
    plt.show()

     


    Bar & Histogram

    Bar plot

    Bar 모양의 plot을 그려볼게요.

    • .bar( ) - bar plot을 그리는 함수
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.arange(10)
    fig, ax = plt.subplots(figsize=(12, 4))      # figure 의 size 를 설정 (가로, 세로)
    ax.bar(x, x**2)                              # bar plot 그리기
    
    plt.show()

    Bar plot 을 누적해서 그릴 수도 있어요.
    바로 예시를 볼게요.

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.random.rand(3)
    y = np.random.rand(3)
    z = np.random.rand(3)
    data = [x, y, z]                                # x, y, z 를 하나의 List 에 저장
    
    fig, ax = plt.subplots()
    x_ax = np.arange(3)
    
    for i in x_ax:
        ax.bar(x_ax, data[i],                       # x, y 에 해당하는 data
               bottom=np.sum(data[:i], axis=0))     # 바닥부터 i 까지 data를 누적 (axis=0: 세로)
        ax.set_xticks(x_ax)                         # x 축을 범위 대신 tick 으로 표현하도록 설정
        ax.set_xticklabels(["A", "B", "C"])         # tick 의 이름을 설정
    
    plt.show()

     

    Histogram

    마지막은 Histrogram입니다.
    Histrogram 은 도수분포를 나타내는 그래프죠.
    관측한 데이터의 분포 특징이 한눈에 보이도록 기둥모양으로 나타낸 것입니다..

    • .hist( ) - Historgram을 그리는 함수

    이때 주의할 함수가 있어요. 바로 .rand() 와 .randn() 입니다.

    • .rand() - 0~1 사이 값의 균일한 분포 즉 uniform distribution(균등 분포)을 갖는 값을 return 하는 함수 (음수 불가)
    • randn() - 가우시안 표준 정규분포(평균 0, 표준편차 1)를 따르는 난수를 생성해 return 하는 함수 (음수 불가)
    import numpy as np
    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    data = np.random.randn(1000)           # randn 함수 사용
    ax.hist(data, bins=50)                 # bins=50 - 50개의 막대로 data 를 표현한다.
    
    plt.show()


    여기까지 "Matplotlib"에 대해 알아봤어요.
    글이 도움이 되셨다면 공감 버튼 눌러주세요. 😊

     

    댓글

    Designed by JB FACTORY