[matplotlib] 히스토그램 그리기 plt.hist()

반응형
    반응형

    여러모로 많이 쓰이는 히스토그램 그리는 방법에 대해서 알아볼까 합니다.

    matplotlib를 이용해 그리는데 파라미터가 굉장히 많습니다. 

    그만큼 변형이 많이 되는 그래프입니다. 

     

    파라미터를 보면 굉장히 많습니다.

    plt.hist(x,bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs)

     

    여기서 메인으로 쓰는 파라미터만 설명을 하겠습니다.

    • x : 데이터값으로 리스트나 ndarray 타입으로 넣음
    • bins : 막대(bins)의 갯수
    • range : bin의 범위
    • density : Normalize를 함.
    • weights : x에 있는 모든 값의 가중치(y값의미) , x와 모양 같아야함
    • cumulative :  True면 누적그래프로 그림
    • histtype : 막대그래프 타입(bar, barstacked, step, stepfilled)
    • align : 각 막대 중앙의 위치(left, mid, right)
    • orientation : 막대의 방향(vertical,horizontal), 기본값은 vertical, horizontal으로 하면 가로타입 막대그래프로 그려짐
    • rwith : 막대의 너비
    • log : True면 히스토그램의 축이 로그 스케일(log scale)로 결정
    • color : 막대의 색 결정
    • label : 각 데이터에 대한 라벨을 붙임. 문자열이고 2개이상일때는 리스트로 넣어야함
    • stacked : True일때 다수의 데이터를 겹쳐서 표현할 수 있음. 

    여기서 x 만 필수 입력이고 나머지는 모두 선택가능합니다.

    파라미터를 봐도 이미 설정이 되어있기 때문에 다 적어야 하는건 아닙니다.

     

     

    간단한 예제를 보겠습니다.

    2차원 값 y의 데이터를 히스토그램으로 그려보겠습니다.

    y = np.random.standard_normal((1000,2))
    plt.hist(y, label=['1col','2col'],bins=25)
    plt.legend(loc=0)
    plt.grid()

    각 column에 대해서 히스토그램을 그렸습니다. 

    그림은 괜찮게 나왔습니다.

    확실한 비교를 위해 stack을 사용해 분리를 시켜보겠습니다.

     

    plt.hist(y, label=['1col','2col'],color=['r','b'], stacked=True, bins=25)
    plt.legend(loc=0)
    plt.grid()

     

    아까와는 확연히 다른 그래프가 나왔습니다. 

    분명 같은 데이터를 하는데도 그림에 따라 느낌이 다릅니다. 

    나타내고자 하는 부분을 어느 그래프가 더 강조를 해주는지 잘 알고 있으면 효과적으로 히스토그램을 쓸 수 있을겁니다.

     

    stack 그래프에 cumulative 도 추가를 해보겠습니다.

    plt.hist(y, label=['1col','2col'],color=['r','b'],cumulative=True, stacked=True, bins=25)
    plt.legend(loc=0)
    plt.grid()

    cumulative로 누적그래프를 그렸습니다. 또 다른 느낌입니다. 

    이렇게 파라미터마다 각자의 기능이 있어서 히스토그램 변형이 많이 됩니다. 

    자신이 원하는 그래프를 찾아갈때 히스토그램으로 여러 시도를 해보는 건 어떨까 싶습니다.

     

     

    관련 포스팅

    [Python/matplotlib] - [matplotlib] 산포 그래프(scatter)

    [Python/Numpy] - ndarray 데이터로 그래프 그리기(matplotlib)

     

    댓글

    Designed by JB FACTORY

    ....