matplotlib의 구조와 rcParams에 대해 알면 나도 plot 고수 📈
Matplot의 구조 📈
데이터를 시각화 하기 위해서 Matplotlib
을 자주 사용합니다. 대부분의 사용자들이 세부적인 구조를 알지 못해 디버깅을 하는데 많은 시간을 소요하게 됩니다. 이번 포스팅에서는 matplotlib 의 구조 및 작동원리에 대해서 알아보고 그래프 그리기 고수가 되는 첫걸음을 내딛어 보겠습니다.
코딩을 하다보면 다음 두 가지를 import
하는 경우를 많이 보셨을 겁니다.
import matplotlib
import matplotlib.pyplot as plt
plt.plot()
으로 그래프를 그리면 다음 3 단계를 거치게 됩니다.
1. pyplot을 이용한 명령
2. 객체들의 생성 (Figure, Line, Axes)
3. 그리기
이중 3번째인 그래프를 그리기 위한 모든 것을 담고 있는 것이 matplotlib
입니다. 그리고 호출을 위한 간단한 API를 제공하는 것이 matplotlib.pyplot
입니다. 그러므로 그래프를 그리는데 필요한 요소들은 matplotlib 에서 다루시면 됩니다. matplotlib 은 그래프를 그리기 위해서 Runtime Configuration Parameters, 줄여서 rcParams라는 딕셔너리의 값을 이용해서 그립니다. 전체적인 구조를 그림으로 나타내면 아래와 같습니다.
rmParams 딕셔너리의 값을 바꿔주면, backend 에서 그릴 때, 다른 방식으로 그리게 됩니다. 그래프의 폰트 사이즈, 크기, 바탕색 등 여러가지 성질들이 모두 matploblit.rcParams 딕셔너리에 담겨있습니다.
예를 들어서 axes의 테두리와 배경색을 바꾸고 싶다면 아래와 같이 rcParams
의 값을 바꿔주기만 하면 됩니다. [🙋♂️🙋♀️]
runtime configuration은 번역하면, 동적 구성인데, 변수들에 대한 정보를 저장하는 용도로 쓰입니다. matplotlib에서 성질을 저장하는 rcParams 딕셔너리를 조작하면 Runtime(생성시) 그리는 정보를 바꿔줄 수 있습니다.
실제로 값을 바꿔보자 🙋♂️🙋♀️
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['axes.edgecolor'] = "red"
matplotlib.rcParams['axes.facecolor'] = "yellow"
plt.plot([1,3,2])
Additional Tips 1. Artist in rcParams
rmParams를 출력해보면, key-value 쌍이 굉장히 많은 것을 확인할 수 있습니다. 이들은 모두 Artist.속성
으로 이루어져있습니다 (e.g., axes.edgecolor
) . rcParams 딕셔너리에 포함된 객체들은 다음과 같습니다.
Artists = set()
for key in matplotlib.rcParams.keys():
if "." in key:
Artists .add(key.split(".")[0])
print(Artists)
{'_internal',
'agg', 'animation','axes',
'axes3d','boxplot','contour',
'date','docstring','errorbar',
'figure','font','grid',
'hatch','hist', 'image',
'keymap','legend','lines',
'markers','mathtext','patch',
'path','pcolor', 'pcolormesh',
'pdf','pgf','polaraxes',
'ps','savefig', 'scatter',
'svg','text', 'tk',
'webagg', 'xaxis','xtick',
'yaxis', 'ytick'}
Additional Tips 2. What is Artist in matplotlib?
Artist는 matplot에서 데이터 및 시각화를 위한 객체들을 나타냅니다.
matplotlib은 다음과 같은 3개의 층으로 이루어져있습니다.
결국,
(1) 그래프에 대한 값을 바꾸고 싶다면, Artist Layer의 객체에 포함된 변수를 바꿔주면 되고
(2) 그림 그리는 방법에 대해서 바꾸고 싶다면 rcParams 딕셔너리의 값을 바꿔주면 됩니다.
import matplotlib
matplotlib.rcParams["Artist.color"] = "happy color"
rcParams에 대해서 포스팅 한 것은 맨날 구글링을 통해 폰트 사이즈를 바꾸던 필자의 고충이 있었기 때문입니다. 다른 분들께도 유익한 정보가 되기를 바랍니다. 🧐
References
- https://www.kaggle.com/getting-started/146720
- https://2021.desosa.nl/projects/matplotlib/posts/essay2-vision-to-architecture/
- https://matplotlib.org/stable/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py