matplotlib의 계층구조
matplotlib는 다음과 같은 hierarchical structure를 가지고 있음.
- 일반적으로
Figure
는 하나 이상의Axes
를 가지며(포함하며),Axes
는 일반적으로 2개의Axis
를 포함(2D image인 경우)함.
(Axis
들은Tick
을 포함) - matplotlib에서 그려지는 모든 object는
Artist
임. Figure
,Axes
,Axis
는 모두Artist
이면서 container 임.- 하나의 그래프(or chart)에는 하나의 figure만이 존재함.
다음 그림은
이들의 hierarchical structure와
해당 구조의 Artist
들(or container
들)이 실제 그래프에서 어디에 속하는지를 보여줌.
다음 예제 code는
각 계층에 속하는 object들이
자신을 포함하고 있는 object와 자신이 포함한 object를 어떻게 접근하는지를 보여줌.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1) # make a blank plotting area
# fig, ax = plt.subplots() # ax를 포함하고 있는 fig를 반환. 위의 두 line을 한번에 처리.
print('fig.axes:', fig.axes) # fig.axes는 list임. (Figure는 복수 개의 Axes를 가질 수 있음)
print('ax.figure:', ax.figure) # ax 는 Axes의 instance임.
print('ax.xaxis:', ax.xaxis)
print('ax.yaxis:', ax.yaxis)
print('ax.xaxis.axes:', ax.xaxis.axes)
print('ax.yaxis.axes:', ax.yaxis.axes)
print('ax.xaxis.figure:', ax.xaxis.figure)
print('ax.yaxis.figure:', ax.yaxis.figure)
Artist
matplotlib에서 그려지는 모든 object를 Artist 라고 지칭함.
Figure
,Axes
,Axis
,Tick
모두Artist
들임.Artist
들의 root는Figure
이며, 해당하는 그림(figure)가 canvas에 rendering됨.- 일반적으로 다루어지는
Artist
들은 하나의Axes
에 속함.
다음 그림은 각 Artist
들이 어떻게 차트(figure)를 구성하는지를 보여줌.
Artist
s는 크게 다음의 두가지 type으로 나뉨: Container, Primitive
- Container는 자신보다 아래 단계의 container 또는 primitive를 포함할 수 있음 (일종의
Artist
들이 포함될 수 있는 box라고 생각할 수 있음). - Primitive는 실제로 그려지는 차트의 종류나
annotation
,legend
등에 해당하는 Artist들임.
Containers
1. Figure
결과물로 그려지는 figure 하나가 바로 Figure
class의 객체에 해당.
Figure
는 자신이 포함하고 있는Axes
들을 childAxes
라고 부르며, 이들을 관리함 (다수의 Axes instances를 가질 수 있음.)- title, figure legend, colorbar 등의 Artist들도 관리함.
# figure를 생성하고 axes를 추가.
fig = plt.figure()
ax = fig.add_subplot(1,1,1) # make a blank plotting area
# 일반적으로는 아래처럼 Axes의 객체 ax와 Figure 객체 fig를 한번에 생성시킴.
fig, ax = plt.subplots() # a figure with a single Axes
fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes.
# axs는 여러 Axes 객체로 구성된 collection.
# a figure with one axes on the left, and two on the right:
fig, axs = plt.subplot_mosaic([['left', 'right_top'],
['left', 'right_bottom']])
2.Axes
Axes
는 Figure
에 부착되는 Artist
이며,
전체 figure canvas에서 실제 data가 그려지는 영역을 할당받고
해당 영역에 대한 coordinate system을 제공 하는 Class임.
- 일반적으로 2개의
Axis
를 포함하고 있음. (2D graph의 경우임. 3D인 경우 3개 포함) set_title()
통해 title을 설정할 수 있고,set_xlabel()
,set_ylabel()
을 통해 각Axis
의 label을 설정할 수 있음.- OOP interface를 차트를 그리는 경우 가장 많이 이용되는 entry point이기 때문에 다양한
plot
관련 메소드를 가짐.
The
matplotlib.axes.Axes
is the center of the matplotlib universe.
실제로 Figure의 인스턴스와 Axes의 인스턴스를 동시에 생성하고 난 이후에는,
Axes 인스턴스를 통해 graph의 그리게 된다.
즉, Primitives들의 사용은 거의 대부분 Axes object의 대응하는 메서드 (helper methods)를 통해 이루어짐.
다음은 Axes
의 attribute들에 대한 표이다.
Attribute | Desc. |
Axes.artists |
Axes 객체에 속한 Artist object들의 list |
Axes.patch |
Axes 의 background를 위한 Rectangle object |
Axes.collections |
Axes 의 Collection object들의 list |
Axes.images |
Axes 의 AxesImage object들의 list |
Axes.legends |
Axes 의 Legend object들의 list |
Axes.lines |
Axes 의 Line2D object들의 list |
Axes.patches |
Axes 의 Patch object들의 list |
Axes.texts |
Axes 의 Text object들의 list |
Axes.xaxis |
matplotlib.axis.XAxis object |
Axes.yaxis |
matplotlib.axis.YAxis object |
다음은 Axes에서 많이 이용되는 helper method들과 관련 Artist
class들, 그리고 Axes
의 attribute들의 관계를 나타낸 표이다.
Helper methods | Artist |
Axes 's attribute |
ax.annotate |
Annotate |
Axes.texts |
ax.bar |
Rectangle |
Axes.patches |
ax.errorbar |
Line2D and Rectangle |
Axes.lines and Axes.patches |
ax.fill |
Polygon |
Axes.patches |
ax.hist |
Rectangle |
Axes.patches |
ax.imshow |
AxesImage |
Axes.images |
ax.legend |
Legend |
Axes.legends |
ax.plot |
Line2D |
Axes.lines |
ax.scatter |
PathCollection |
Axes.collections |
ax.text |
Text |
Axes.texts |
3. Axis
축의 scale과 limit을 설정하고 tick과 ticklabel들을 생성하는데 사용되는 class.
- tick의 위치는
Locator
에 의해서 결정되며, ticklabel의 문자열은Formatter
로 조절됨. Axes
의set_xlabel
,set_ylabel
을 통해Axis
의 label을 설정하는 것도 가능함 (실제 구현은 Axis의 대응하는 메서드가 호출되어 이루어짐.).
Attributes | Desc. |
Axis.label |
Axis 의 label에 해당하는 Text object |
Axis.majorTicks |
major tick 을 위한 list |
Axis.minorTicks |
minor tick 을 위한 list |
다음 code는 Axis의 attribute들을 확인해보는 방법을 보여줌.
xax = ax.xaxis
print('xax.label:', xax.label)
print('xax.majorTicks:\n', xax.majorTicks) # seven major ticks (from 0 to 6) and two invisible ticks locating outside of the figure
print('xax.minorTicks:\n', xax.minorTicks) # two ticks outside the figure
더 읽어보면 좋은 자료
https://matplotlib.org/stable/tutorials/introductory/quick_start.html
https://gist.github.com/dsaint31x/bb5720ccf170b52fa9a5cc38d4ac92b7
'Python > matplotlib' 카테고리의 다른 글
[matplotlib] : backend 란 (0) | 2023.07.20 |
---|---|
[matplotlib]: Figure and Axes (0) | 2023.07.20 |
[Python] matplotlib : Axis Scale and Ticks (0) | 2023.07.14 |
[matplotlib] : Styling Artists and Labeling Plots (0) | 2023.07.14 |
[Python] Matplotlib Font설정 : 한글 사용하기 (colab). (0) | 2023.07.12 |