본문 바로가기
카테고리 없음

[Matplotlib] 차트에 테이블 추가하기 (feat. table)

by 부자 꽁냥이 2022. 11. 5.

안녕하세요~ 꽁냥이에요. 차트에 테이블을 추가하면 더 많은 정보를 한눈에 볼 수 있어 좋을 것입니다. Matplotlib에서는 차트에 테이블을 넣을 수 있도록 table이라는 함수를 제공하고 있는데요. 이번 포스팅에서는 table 함수의 사용법을 알아보겠습니다.


   차트에 테이블 추가하기 (feat. table)

- table 함수 사용법 -

table 함수의 사용법은 다음과 같습니다.

 

table(cellText='셀 값', rowLabels='row 라벨', colLabels='칼럼 라벨')

실제 코드를 통하여 사용법을 알아보겠습니다. 아래 코드는 스택 바 차트에서 각 스택 별로 누적되는 값을 테이블로 표현한 것입니다.

 

import numpy as np
import matplotlib.pyplot as plt

## 데이터
data = [[ 66386, 174296,  75131, 577908,  32015],
        [ 58230, 381139,  78045,  99308, 160454],
        [ 89135,  80552, 152558, 497981, 603535],
        [ 78415,  81858, 150656, 193263,  69638],
        [139361, 331509, 343164, 781380,  52269]]

columns = ('혹한', '폭풍', '홍수', '지진', '해일') ## 칼럼 명
rows = ['%d year' % x for x in (100, 50, 20, 10, 5)] ## row 라벨

values = np.arange(0, 2500, 500)
value_increment = 1000

# 스택 바 차트 컬러
colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows)))
n_rows = len(data)

index = np.arange(len(columns)) + 0.3 ## 막대 가로 중심 x좌표
bar_width = 0.4 ## 막대폭

## 스택 바 차트 각 막대의 하단 y 좌표
y_offset = np.zeros(len(columns))

## 스택 바 차트 & 테이블 셀별 텍스트 생성
fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
cell_text = []
for row in range(n_rows):
    plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
    y_offset = y_offset + data[row]
    cell_text.append(['%1.1f' % (x / 1000) for x in y_offset])

## 색상과 텍스트 반전(최신 데이터를 위로 올린다)
colors = colors[::-1]
cell_text.reverse()

# 테이블
the_table = plt.table(cellText=cell_text, ## 셀별 텍스트
                      rowLabels=rows, ## row 라벨
                      rowColours=colors, ## row 라벨 컬러
                      colLabels=columns, ## 칼럼 라벨
                      cellLoc='center', ## 셀 값 가운데 정렬
                      colLoc='center', ## 칼럼 라벨 가운데 정렬
                      rowLoc='right', ## row 라벨 오른쪽 정렬
                      loc='bottom', ## 테이블 위치
                     )

plt.ylabel("Loss in ${0}'s".format(value_increment))
plt.yticks(values * value_increment, ['%d' % val for val in values])
plt.xticks([])
plt.title('Loss by Disaster')

plt.show()

 

line 41~49

table을 생성합니다. cellText 인자에 셀 값을, rowLabels에는 행 라벨, colLabels에는 칼럼 라벨가 들어있는 배열을 넘겨줍니다. 이때 셀, 행 라벨, 칼럼 라벨 정렬도 지정했습니다. 그리고 좌표축(axes) 기준으로 아래에 테이블을 표시하도록 했습니다.

 

 

코드를 실행하면 위와 같이 스택 바 차트와 각 스택을 누적한 테이블이 잘 나오는 것을 알 수 있습니다. 확실히 스택 바 차트 하나로는 허전하지만 테이블이 있어서 좀 더 많은 정보를 제공하고 이를 통해 차트를 좀 더 잘 이해할 수 있네요.


차트에 테이블을 추가하는 것은 꽁냥이가 잘 사용하진 않는데요. 그래도 알아두면 언젠가 도움이 되지 않을까 합니다. 부디 이번 포스팅이 어떤 분께는 도움이 되시길 바라며 이상 포스팅 마치겠습니다.

 

- 참고자료 -

Matplotlib - Table Demo


댓글


맨 위로