목차
why build visuals?
-for exploratory data analysis
-communicat data clearly
-share unbiased representation of data
to make a great visual
- less is more effective, attractive, impactive!
ex) darkhorseanalytics.com
https://www.darkhorseanalytics.com/portfolio-all
matplotlib architecture
matplotlib는 Python에서 데이터 시각화를 위한 라이브러리로, 다양한 차트와 플롯을 생성할 수 있습니다. matplotlib의 아키텍처는 크게 3가지 구성 요소로 이루어져 있습니다.
1) Backend
matplotlib의 backend는 그림이 그려질 대상을 의미합니다. 즉, 그래프를 출력할 화면의 종류나 파일 형식을 선택하는 역할을 합니다. matplotlib는 다양한 backend를 제공하며, 대표적인 예로는 Tkinter, Qt, GTK 등 GUI 프레임워크를 지원하는 backend와 PDF, PNG, SVG 등 다양한 파일 형식을 지원하는 backend가 있습니다.
- matplotlib.backend_bases.FigureCanvas
encompasses the area onto which the figure is drawn
FigureCanvas 클래스는 Figure 객체를 그리는 데 사용되는 canvas(캔버스) 역할을 합니다. 캔버스는 그림을 그릴 수 있는 공간이며, FigureCanvas는 이 캔버스를 표현합니다. FigureCanvas 클래스는 GUI backend를 사용하는 경우, GUI 프레임워크의 canvas와 연결되어 동작합니다. 예를 들어, Tkinter를 사용하는 경우, FigureCanvasTkAgg 클래스가 사용되며, PyQt나 PySide를 사용하는 경우, FigureCanvasQTAgg 클래스가 사용됩니다.
- matplotlib.backend_bases.Renderer
knows how to draw on the figure canvas
- matplotlib.backend_bases.Event
handles user inputs such as keyboard strokes and mouse clicks
2) Artist
matplotlib에서는 다양한 그래픽 요소들을 표현하기 위해 두 종류의 Artist 객체를 제공합니다.
matplotlib의 Artist는 그래프를 구성하는 모든 요소들을 의미합니다. 예를 들어, 선, 면, 텍스트, 축, 레이블 등 모든 그래프의 구성 요소가 Artist 객체로 구현됩니다. 각각의 Artist는 그 자체로 색상, 선 굵기, 투명도 등의 스타일을 가지며, 이러한 스타일을 조합하여 그래프를 완성합니다.
two types of artists objects:
- primitive: line2d, rectangle, circle, text
Primitive Artist 객체는 그래프를 구성하는 기본적인 도형을 나타내는 객체입니다. 라인, 사각형, 원, 텍스트 등의 기본 도형 요소를 포함합니다. 이러한 Primitive Artist 객체는 하나의 도형만을 나타내며, 다른 도형과 결합하여 복잡한 그래프를 만들 수 있습니다.
주요 Primitive Artist 객체로는 다음과 같은 것들이 있습니다.
- composite: axis, tick, Axes, figure
Composite Artist 객체는 여러 개의 Primitive Artist 객체를 포함하고 있는 복합적인 그래프 요소입니다. 예를 들어, 축(Axis), 눈금(Tick), 그리드(Grid) 등은 여러 개의 Primitive Artist 객체를 포함하는 Composite Artist 객체입니다. 이러한 Composite Artist 객체는 하나 이상의 Primitive Artist 객체를 조합하여 그래프를 나타내며, 그래프를 구성하는 요소들의 집합으로 볼 수 있습니다.
matplotlib에서 Figure와 Axes는 그래프를 그리기 위한 두 가지 중요한 클래스입니다.
Figure는 그래프를 그리기 위한 캔버스 역할을 합니다. 즉, 그래프가 그려지는 전체적인 영역을 나타내며, 여기에 그래프와 관련된 여러가지 요소들(제목, 축 라벨, 범례 등)을 포함합니다. Figure는 여러 개의 Axes 객체를 포함할 수 있으며, Figure 객체를 생성하고 다양한 속성을 설정하여 그래프를 그릴 수 있습니다.
Axes는 그래프 영역을 나타냅니다. 즉, 실제 그래프가 그려지는 영역으로, Figure 내에서 x-y 좌표 평면상에서 그래프를 그립니다. Axes는 라인 플롯, 산점도, 막대 그래프 등의 다양한 그래프를 생성할 수 있으며, Figure 객체 내에서 add_subplot() 또는 add_axes() 메소드를 사용하여 생성할 수 있습니다.
Figure와 Axes는 서로 다른 역할을 하지만, 같이 사용하여 그래프를 생성하고 설정할 수 있습니다. Figure에서 전체적인 그래프 요소들(제목, 축 라벨 등)을 설정하고, Axes에서 실제 그래프를 생성하고 다양한 설정을 변경할 수 있습니다. 이러한 방식으로 Figure와 Axes를 함께 사용하여 matplotlib를 사용하게 됩니다.
Primitive Artist와 Composite Artist 객체를 적절히 조합하여 그래프를 만들어내며, 이를 통해 matplotlib에서 다양한 시각화 효과를 구현할 수 있습니다.
3) Scripting layer
matplotlib에서는 두 가지의 API 인터페이스를 제공합니다.
그 중 하나는 scripting layer API 인터페이스로, 사용자가 간단하게 그래프를 생성하고 조작할 수 있도록 간략화된 인터페이스를 제공합니다. 이 방법은 쉽고 빠르게 그래프를 생성하고 다양한 설정을 변경할 수 있어서 데이터 시각화를 빠르게 구현할 때 유용합니다.
pyplot은 matplotlib의 scripting layer API로, pyplot 모듈을 사용하여 간단하게 그래프를 그리고 다양한 설정을 변경할 수 있습니다. pyplot을 사용하면 객체 지향 API에 비해 더 적은 코드로 그래프를 생성하고 다양한 설정을 변경할 수 있으며, 일반적으로 대화식 환경에서 작업하는 경우에 유용합니다.
따라서, pyplot은 matplotlib의 객체 지향 API를 사용하기 쉽도록 wrapping한 인터페이스이며, scripting layer API의 일종입니다.
matplotlib의 scripting layer는 Python 스크립트에서 그래프를 생성하고 스타일을 적용하는 인터페이스를 제공합니다. 이 계층에서는 사용자가 그래프를 생성하고 Artist를 조합하여 그래프를 구성합니다. 또한, 스크립트에서는 backend를 선택하고 그래프를 저장하는 등의 작업을 수행합니다.
또 다른 인터페이스는 객체 지향 API 인터페이스로, 그래프 요소들을 객체로 생성하고 다양한 메소드를 이용해 구성하는 방법입니다. 이 방법은 복잡하고 상세한 그래프를 구현할 때 유용합니다.
이러한 3가지 요소들은 matplotlib의 아키텍처에서 각각의 역할을 담당하며, 함께 동작하여 데이터 시각화를 가능하게 합니다.
plot function