데이터를 시각화할 때 그래프와 함께 표(table) 형태로 값을 보여주면 가독성이 크게 향상됩니다. Matplotlib에서는 table() 메서드를 사용해 현재 축(axe) 위에 테이블을 손쉽게 배치할 수 있습니다. 이번 글에서는 Pandas 데이터프레임을 Matplotlib 플롯 위에 테이블로 표시하는 전체 과정을 단계별로 살펴보겠습니다.
구현 단계
subplots() 메서드를 사용해 figure 크기가 (7, 7)인 figure와 서브플롯 집합을 생성합니다.
time과 speed라는 두 개의 열(키)을 가진 데이터프레임을 만듭니다.
배열의 크기(shape)를 계산합니다.
table() 메서드를 사용해 현재 축에 테이블을 추가합니다.
텍스트가 셀 너비 안에 들어갈 때까지 글꼴 크기를 자동으로 조절합니다.
테이블의 글꼴 크기를 직접 설정합니다.
matplotlib 테이블의 각 셀을 반복(iteration)하면서 배경색(face color), 테두리 색(edge color), 텍스트 색(text color)을 지정합니다.
figure를 저장하고 화면에 출력합니다.
예제 코드
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
df = pd.DataFrame(dict(time=list(pd.date_range("2021-01-01 12:00:00",
periods=10)), speed=np.linspace(1, 10, 10)))
size = (np.array(df.shape[::-1]) + np.array([0, 1])) * np.array([3.0, 6.0])
mpl_table = ax.table(cellText=df.values, bbox=[0, 0, 1, 1], colLabels=df.columns)
mpl_table.auto_set_font_size(False)
mpl_table.set_fontsize(12)
for k, cell in mpl_table._cells.items():
cell.set_edgecolor('black')
if k[0] == 0 or k[1] < 0:
cell.set_text_props(weight='bold', color='w')
cell.set_facecolor('red')
else:
cell.set_facecolor(['green', 'yellow'][k[0] % 2])
plt.show()
실행 결과

위 코드를 실행하면 데이터프레임의 값이 담긴 테이블이 플롯 영역 전체(bbox=[0, 0, 1, 1])에 배치된 것을 확인할 수 있습니다. 첫 번째 행(헤더)은 빨간색 배경에 흰색 굵은 글씨로 강조되며, 나머지 데이터 행은 초록색과 노란색이 번갈아 가며 적용되어 줄무늬 효과를 나타냅니다. 모든 셀에는 검은색 테두리가 적용되어 표 구조가 명확하게 드러납니다.