본문 바로가기
데이터 분석/시각화

[줄기 잎 그림(Stem Plot)] Matplotlib을 이용하여 줄기-잎 그림 그리기.

by 부자 꽁냥이 2021. 4. 9.

안녕하세요~ 꽁냥이에요. 줄기-잎 그림은 데이터 분포를 시각화하는 하나의 도구인데요. 이번 포스팅에서는 Matplotlib을 이용하여 줄기-잎 그림을 그리는 방법에 대해서 알아보겠습니다. 여기서 다루는 내용은 다음과 같습니다.

 

1. 줄기-잎 그림 그리기

2. 줄기-잎 그림 꾸미기

3. 줄기-잎 그림 활용


   1. 줄기-잎 그림 그리기

Matplotlib에서는 stem이라는 걸 이용하여 줄기-잎 그림을 그릴 수 있습니다. stem의 기본 사용법은 다음과 같습니다.


stem( x, y, use_line_collection=True )


여기서 x는 x 좌표값이 담긴 배열이며 y는 x에 대응하는 y값이 담긴 배열입니다. use_line_collection은 줄기-잎 그림의 구성 요소인 선분을 개별로 처리할지 묶어서 처리할지를 결정하는 인자입니다. Matplotlib 공식 문서에는 성능 상의 이유로 use_line_collection을 True로 할 것을 권장하고 있습니다.

 

먼저 필요한 matplotlib.pyplot을 임포트하고 데이터를 미리 만들어주세요.

 

import matplotlib.pyplot as plt

## 데이터
data = [10,11,22,24,35,37,45,47,48,58,56,59,61,71,81,92,95]
leafs = [x%10 for x in data] ## 잎
stems = [x//10 for x in data] ## 줄기

 

이제 한번 그려볼까요?? 아래 코드를 실행해 주세요.

 

fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
plt.stem(stems, leafs,use_line_collection=True) ## 줄기 잎 그림

plt.show()

 

stem 이 그려주는 줄기-잎 그림은 아래 그림과 같이 maker, stem line, base line 이 세 개로 이루어져 있습니다.

 

 

따라서 이 그림을 꾸미고 싶으면 이 3가지 요소를 잘 컨트롤 해야합니다. 다음 챕터에서 이들을 컨트롤하여 좀 더 멋지게 꾸며볼게요.

반응형

   2. 줄기-잎 그림 꾸미기

먼저 줄기-잎 그림에서 stem line과 base line을 안보이게 해 보겠습니다. 선보다는 데이터 포인트를 강조하기 위해서이지요.

 

fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
## 줄기 잎 그림
markers, stemlines, baseline = plt.stem(stems, leafs,use_line_collection=True)
stemlines.set_visible(False) ## stem line 안보이게
baseline.set_visible(False) ## base line 안보이게
plt.show()

 

line 5~6

set_visible 메서드에 False를 넘겨주면 사용하여 라인을 안보이게 할 수 있습니다. 

 

 

이번에는 stem line은 보이게 하고 라인 스타일을 적용해봅시다. 꽁냥이는 점선에 보라색 stem line을 만들고 marker의 색상은 빨간색으로 해볼 거예요. 아래 코드를 살펴볼게요.

 

fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
## 줄기 잎 그림
markers, stemlines, baseline = plt.stem(stems, leafs,use_line_collection=True)

markers.set_color('red')

stemlines.set_linestyle('--')
stemlines.set_color('purple')

baseline.set_visible(False) ## base line 안보이게
plt.show()

 

line 6

마커의 색을 빨강으로 합니다.

 

line 8

라인스타일을 점선으로 합니다.

 

line 9

라인 색상을 보라색으로 설정합니다.

 

 

이번에는 stem line을 하나의 색이 아닌 라인별로 색상을 입혀보겠습니다. 또한 수직선이 아닌 수평선으로 나타내 보겠습니다. 아래 코드를 살펴볼게요.

 

import seaborn as sns

colors = sns.color_palette('hls',len(stems))

fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
## 줄기 잎 그림
markers, stemlines, baseline = plt.stem(stems, leafs,
                                         orientation = 'horizontal',
                                         use_line_collection=True)

markers.set_color('red')

stemlines.set_linestyle('--')
stemlines.set_color(colors)

baseline.set_visible(False) ## base line 안보이게
plt.show()

 

line 3

줄기 개수에 맞게 색상 리스트를 만들어줍니다.

 

line 9

orientation을 'horizontal'로 하여 수평선을 그려주도록 합니다.

(orientation 인자는 3.4.1 버전 기준으로 설정할 수 있지만 예전 버전에는 없을 수 있습니다)

 

line 15

색상 리스트를 적용해줍니다.

 

 


   3. 줄기-잎 그림 활용

줄기-잎 그림은 특정 함수의 모양을 보고 싶을 때도 사용할 수 있습니다. 꽁냥이는 sin 함수의 그래프를 그려볼 거예요. 아래 코드를 실행해주세요. 코드 설명은 주석으로 대체합니다.

 

import numpy as np
x = np.linspace(0.1, 2 * np.pi, 41)
y = np.sin(x)

colors = sns.color_palette('hls',len(x))

fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')

marker, stemlines, baseline = plt.stem(x, y, use_line_collection=True)

marker.set_markerfacecolor(colors[1]) ## 마커 색깔

stemlines.set_linestyle('--') ## 라인 스타일
stemlines.set_linewidth(1) ## 라인 두께
stemlines.set_edgecolor(colors) ## 라인 색깔

baseline.set_color('k') ## 베이스 라인 색깔
baseline.set_linewidth(1) ## 베이스 라인 두께

plt.show()

 

 

또한 줄기 - 잎 그림은 범주형 데이터를 x 좌표로 사용할 수 있습니다. 아래 코드처럼 말이죠.

 

y = [10,13,12,5,3] 
category = ['A','B','C','D','E'] ## 범주

colors = sns.color_palette('hls', len(category)) ## 색상 리스트

fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')

marker, stemlines, baseline = plt.stem(category,y,use_line_collection=True)

stemlines.set_color(colors) ## 라인 색깔

baseline.set_visible(False) ## 베이스라인 감추기
plt.show()

 

 

범주별로 각종 통계량을 나타내고 싶을 때 줄기-잎 그림을 활용할 수 있어요.


이번 포스팅에서는 줄기-잎 그림을 그려보는 방법에 대해서 알아보았습니다. 질문이 있으신 분들은 댓글로 남겨주시고 지금까지 꽁냥이 글 읽어주셔서 감사합니다.

 

안녕히 계세요~~

 


댓글


맨 위로