머신러닝 전문가들이 주로 정적 및 대화형 시각화를 제작할 때 애용하는 파이썬 플로팅 라이브러리가 바로 Matplotlib입니다.
Matplotlib란 무엇인가?
2003년 John D. Hunter에 의해 개발된 Matplotlib은 2021년 5월 8일에 버전 3.4.2로 공개되었습니다. 이 라이브러리는 주로 파이썬으로 작성되었으며, 일부는 C, Objective-C, JavaScript로 구성되어 있어 다양한 플랫폼과의 호환성을 자랑합니다.
Matplotlib은 파이썬의 수치 연산 확장인 NumPy를 활용합니다. NumPy와의 결합은 오픈 소스 대안으로서의 실행 가능성을 높여 MATLAB보다 더 선호되는 이유 중 하나입니다.
파이썬 GUI 응용 프로그램에서 Matplotlib은 자체 제공되는 객체 지향 API를 통해 정적 플롯을 생성할 수 있도록 지원합니다.
사용자는 몇 줄의 파이썬 코드만으로 산점도, 히스토그램, 막대 차트, 원형 차트, 선 그래프, 상자 그림 등 다양한 형태의 플롯을 통해 데이터를 시각화할 수 있습니다.
Matplotlib은 파이썬 셸, Jupyter 노트북, Jupyter 랩, PyCharm, Anaconda와 같은 환경에서 활용 가능하며, Flask 및 Django와 같은 웹 애플리케이션 서버에서도 폭넓게 사용됩니다.
MATLAB과 유사하게, 글꼴, 선, 색상 및 스타일 면에서 플롯을 세밀하게 제어할 수 있다는 장점이 있습니다.
파이썬에서 Matplotlib 라이브러리에 대한 간략한 소개를 마쳤으니, 이제 시스템에 해당 라이브러리를 설치하는 방법에 대해 알아보겠습니다.
Matplotlib 환경 설정
다른 파이썬 패키지 및 라이브러리들과 마찬가지로, pip 패키지 관리자를 사용하여 미리 컴파일된 Matplotlib 라이브러리와 관련 패키지들을 모든 운영체제에 설치할 수 있습니다.
물론, 시스템에 파이썬과 pip 패키지가 먼저 설치되어 있어야 합니다.
아래 명령어를 통해 파이썬 및 pip 버전 정보를 확인하여 이러한 도구가 이미 설치되어 있는지 확인할 수 있습니다.
파이썬 설치 확인
Python --version
pip 설치 확인
pip -V
Matplotlib 설치
다음 명령어를 사용하여 파이썬 패키지 인덱스(PyPI)에서 Matplotlib 패키지를 설치할 수 있습니다.
python -m pip install matplotlib
이 명령어는 Matplotlib 관련 패키지를 다운로드하고 설치합니다. 설치가 완료되면 성공적인 설치 메시지를 확인할 수 있습니다.
Matplotlib이 성공적으로 설치되었는지 확인하려면 다음 명령어를 입력하십시오. 그러면 명령 프롬프트에 Matplotlib 버전 정보가 표시됩니다.
import matplotlib matplotlib.__version__
컴파일되지 않은 Matplotlib 패키지를 설치하려는 개발자는 종속성, 설정 스크립트, 구성 파일 및 패치와 더불어 시스템에 적합한 컴파일러에 접근할 수 있어야 합니다.
하지만 이러한 컴파일되지 않은 Matplotlib 설치 방식은 특히 Matplotlib 초보자에게 복잡할 수 있습니다. 그러니, 단 한 줄의 명령어로 몇 초 안에 라이브러리를 설치하는 것이 훨씬 효율적이지 않을까요? 🤔
Matplotlib을 설치한 후, 패키지를 환경으로 가져와 해당 유틸리티를 이용할 수 있습니다.
Matplotlib 플로팅 옵션
Matplotlib은 데이터 시각화를 위한 다양한 플로팅 옵션을 제공합니다. 또한 플롯을 사용자 정의하기 위해 플롯을 조작하는 데 사용할 수 있는 다양한 테마, 색상 및 팔레트 옵션을 지원합니다.
주요 플로팅 옵션은 다음과 같습니다.
#1. 막대 그래프
막대 도표라고도 알려진 막대 그래프는 동일한 범주 내에서 값의 양적 비교를 시각화하는 데 이상적인 방법입니다.
Matplotlib은 길이와 높이가 비례 값을 나타내는 직사각형 막대를 사용하여 이 플롯을 표현합니다. 막대는 수평 또는 수직 방향으로 배치될 수 있습니다.
Matplotlib은 plt.bar() 함수를 사용하여 막대 그래프를 생성합니다.
또한, 이 플롯을 조작하기 위한 다양한 기능을 이용할 수 있습니다. 예를 들어 plt.xlabel() 및 plt.ylabel() 함수는 각각 그래프의 x축과 y축에 레이블을 지정하며, plt.title() 함수를 사용하여 플롯에 제목을 부여할 수 있고, plt.savefig() 함수는 플롯을 저장합니다. 가장 중요한 기능인 plt.show() 함수는 플롯을 화면에 표시합니다.
#2. 원형 플롯
원형 차트라고도 불리는 원형 통계 플롯은 동일한 범주 내에서 항목들의 비례 분포를 시각화하는 데 사용됩니다.
원형 플롯은 데이터를 백분율 형식으로 표시합니다. 차트의 전체 영역은 전체 데이터의 100%를 나타내며, 개별 원형 조각은 해당 데이터 백분율의 부분을 나타냅니다.
Matplotlib은 원형 차트의 매개변수를 그리고 조정하는 plt.pie() 함수를 제공합니다. autopct와 같은 매개변수를 활용하면 원형 차트 값을 소수점 아래 한 자리까지 출력하여 플롯을 효과적으로 표현할 수 있습니다.
기업에서는 운영, 판매, 또는 자원 관련 정보를 표시할 때 유용한 원형 차트를 자주 활용합니다.
#3. 히스토그램
히스토그램은 숫자 데이터의 분포를 보여줍니다. 연속적인 간격을 사용하여 데이터를 개별 섹션으로 분할합니다.
히스토그램과 막대 그래프의 주요 차이점은 처리하는 데이터 유형에 있습니다. 히스토그램은 연속형 데이터 유형을 처리하는 반면, 막대 그래프는 범주형 데이터를 처리합니다.
Matplotlib은 히스토그램을 생성하기 위해 임의의 값 또는 정의된 값의 배열을 사용하는 hist() 함수를 제공합니다.
#4. 선 그래프
선 그래프는 X와 Y를 기준으로 수치 및 범주로 정의된 두 데이터 값 사이의 관계를 보여주는 데 적합합니다.
선 그래프는 일정 기간 동안 데이터 값의 변화를 추적하는 데 특히 유용합니다.
#5. 산점도
산점도는 데이터 변수 간의 상관 관계를 포함하여 다양한 관계를 보여줍니다. 또한 이상값을 식별하는 데에도 유용하게 사용됩니다.
산점도는 점을 사용하여 데이터 변수의 관계와 한 변수의 변경이 다른 변수에 미치는 영향을 시각적으로 나타냅니다.
Matplotlib에서 플롯을 만드는 방법
Matplotlib은 다양한 플롯을 생성하기 위해 여러 기능을 제공하며, 소량의 코드만으로도 플롯을 쉽게 만들 수 있습니다.
아래에서는 Matplotlib의 다양한 함수를 사용하여 다양한 플롯 옵션을 만드는 방법을 소개합니다.
#1. Matplotlib에서의 막대 플롯
앞서 설명했듯이, 막대 그래프는 한 축의 범주와 다른 축의 값 비교를 막대와 축을 이용하여 데이터 범주를 표시합니다.
Matplotlib의 bar() 함수는 막대 레이아웃을 정의하기 위해 다양한 인수를 사용합니다.
plt.bar(x, y, height, width, bottom, align)
x 및 y 매개변수는 플롯 내의 막대의 x 좌표 값과 y 좌표 값을 나타냅니다. width 매개변수는 막대의 너비를, height 매개변수는 막대의 높이를 설정합니다.
예를 들어, 동물 보호소 x에 있는 개와 고양이 수를 나타내 보겠습니다.
import matplotlib.pyplot as plt import numpy as np x = ["Cats", "Dogs"] plt.xlabel("Cats and Dogs in Shelter") plt.ylabel("No. of animals in Shelter") plt.title("Number of cats and dogs in shelter x") y = [300, 350] plt.bar(x, y, color="black", width = 0.5)
결과:
Matplotlib 막대 플롯 출력
위 예시에서 볼 수 있듯이, color 속성을 사용하여 막대의 색상을 지정할 수 있습니다. 또한 plt.xlabel 및 plt.ylabel은 각각 x축과 y축에 이름을 부여하며, plt.title은 플롯에 제목을 지정합니다.
#2. 원형 플롯 생성 방법
Matplotlib은 pyplot 모듈에 포함된 pie() 함수를 사용하여 원형 차트를 그립니다. 이 함수는 배열 형식으로 플롯할 데이터를 입력받습니다.
문법:
matplotlib.pyplot.pie(data, explode=None, labels=None, colors=None, autopct=None, shadow=False)
colors 매개변수는 원형 조각의 색상을 설정합니다. 값 배열을 사용하여 각 조각의 색상을 지정할 수 있습니다.
원형의 모든 조각에 대한 세부 정보를 추가하기 위해, autopct 인수는 파이썬의 문자열 형식 표기법을 사용하여 각 조각이 나타내는 숫자 백분율을 추가합니다. explode 인수는 0.1부터 시작하는 값 배열을 받아 원형 중심에서 조각까지의 거리를 정의합니다.
특정 프로젝트에 할당된 자원을 백분율로 표시하는 원형 차트를 생성해 보겠습니다.
import matplotlib.pyplot as plt import numpy as np y = np.array([25, 10, 45, 20]) mylabels = ["w", "x", "y", "z"] explodevalues = [0.1, 0.2, 0, 0] colors = ['tab:blue', 'tab:green', 'tab:orange', 'tab:red'] plt.title("Resources allocated for a random project") plt.pie(y, labels = mylabels, colors=colors,explode = explodevalues, autopct="%1.1f%%", shadow = True) plt.show()
결과:
Matplotlib 원형 플롯 출력
위 플롯은 w, x, y, z 레이블이 붙은 네 개의 조각으로 구성된 원형 차트를 보여줍니다. explode 값은 조각들이 원형 중심에서 얼마나 멀리 배치되는지를 결정합니다.
위 차트에서 x는 explode 값이 다른 값들보다 크기 때문에 더 멀리 떨어져 있습니다. shadow 속성은 이미지와 같이 원형 플롯에 그림자를 추가하는 반면, autopct는 모든 조각이 나타내는 전체 원형에 대한 상대 백분율을 설정합니다.
#3. 히스토그램 플롯 생성
히스토그램을 사용하면 일련의 간격을 이용하여 x축에서 주어진 값의 범위를 나타낼 수 있습니다. 반면에 y축은 주파수 정보를 표시합니다.
다른 플롯과는 다르게, Matplotlib에서 히스토그램을 플롯하려면 플롯 생성을 위해 따라야 하는 몇 가지 사전 정의된 단계가 필요합니다.
이러한 단계는 다음과 같습니다.
- 데이터 값 집합에서 범위의 빈(bin)을 생성합니다. 임의의 값을 생성하는 데 사용할 수 있는 np.random.normal() 함수를 활용할 수 있습니다.
- 일련의 간격을 사용하여 값들을 해당 값 범위로 배분합니다.
- 각 특정 간격에 속하는 값의 수를 계산합니다.
- 이제 matplotlib.pyplot.hist() 함수를 사용하여 히스토그램을 만듭니다.
hist() 함수는 다음을 포함한 여러 매개변수를 받습니다.
x – 배열 시퀀스를 나타냅니다.
bins – 정수 또는 문자열 시퀀스를 포함할 수 있는 변수의 겹치지 않는 간격을 나타내는 선택적 매개변수입니다.
range – 빈(bin)의 상한 및 하한 범위를 정의합니다.
align – 이 매개변수는 히스토그램의 정렬을 제어합니다. (왼쪽, 오른쪽 또는 중앙 정렬)
color – 막대의 색상을 정의합니다.
rwidth – 히스토그램 막대의 상대적 너비를 빈의 너비로 설정합니다.
log – log 매개변수는 히스토그램 축의 로그 스케일을 정의합니다.
다음 예제에서는 정의된 값을 사용하여 히스토그램을 플로팅합니다.
from matplotlib import pyplot as plt x = [22, 40, 87, 5, 43, 30, 56,73, 55, 54, 11, 20, 51, 5, 50, 60, 70, 80] plt.hist(x) plt.title('Histogram plot example') plt.xlabel('x axis') plt.ylabel('frequency') plt.show()
결과:
Matplotlib 히스토그램 플롯 출력
#4. Matplotlib에서의 선 그래프
Matplotlib은 구현에 도움이 되는 다양한 기능을 갖춘 pyplot이라는 하위 라이브러리와 함께 제공됩니다.
pyplot과 함께 제공되는 일반 함수인 plot() 함수를 사용하여 곡선 플롯과 다중 선 플롯을 포함한 다양한 선 그래프를 생성합니다. 이러한 다양한 종류의 플롯을 생성하는 것은 y축에 전달되는 값에 따라 달라집니다.
플롯을 생성할 때, matplotlib.pyplot과 Numpy를 가져옵니다. plot(x,y) 메서드는 x 및 y 인수에 임의의 값을 전달하여 선 그래프를 생성합니다.
또한 플롯에 레이블을 지정하는 레이블 변수를 전달할 수 있습니다. title 함수는 플롯 제목을 추가로 지정하는 반면, xlabel 및 ylabel 함수는 좌표축에 이름을 지정합니다. 마지막으로 show() 함수는 플롯을 화면에 표시합니다.
예시:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 10) y = 3*x + 2 plt.title('Line plot example') plt.xlabel('x axis') plt.ylabel('y axis') plt.plot(x, y) plt.show()
결과:
Matplotlib 선 그래프 출력
np.linspace 속성은 x 값에 대해 특정 간격에 걸쳐 균등하게 분포된 숫자 집합인 플롯을 반환합니다. 이렇게 하면 0과 5 범위의 10개 값 배열이 생성됩니다. y 값은 x의 해당 값을 사용하는 방정식에서 생성됩니다.
산점도 생성
Matplotlib은 scatter() 메서드를 사용하여 산점도를 생성합니다. 이 메서드는 다음 매개변수를 사용합니다.
matplotlib.pyplot.scatter(x_axis_data, y_axis_data, s=None, c=None, marker=None, cmap=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None)
x_axis_data 및 y_axis_data 매개변수는 필수 입력값이며, 나머지 매개변수는 기본적으로 None 값을 가지므로 필요에 따라 선택적으로 사용할 수 있습니다. x_axis_data 인수는 x축에 대한 데이터 배열을 정의하고, y_axis_data는 y축에 대한 데이터 배열을 설정합니다.
matplotlib의 산점도 예시:
import matplotlib.pyplot as plt x =[15, 17, 18, 27, 22, 27, 32, 14, 11, 12, 29, 16] y =[19, 16, 17, 18, 10, 26, 13, 27, 14, 18, 17, 35] plt.title('Scatter plot example') plt.xlabel('x variable') plt.ylabel('y variable') plt.scatter(x, y, c ="green") # 플롯 표시 plt.show()
출력 결과는 다음과 같습니다.
Matplotlib 산점도 출력
Matplotlib에서 subplot()이란?
subplot() 함수는 단일 Matplotlib 그림에 여러 플롯을 그릴 수 있도록 합니다. 이 함수를 통해 Figure 내에서 다양한 플롯을 비교하고 분석할 수 있습니다.
이 함수는 세 개의 인수를 가진 튜플을 반환합니다. 행과 열이 각각 첫 번째 및 두 번째 인수로 사용되며, 현재 플롯의 인덱스를 세 번째 인수로 사용합니다.
행과 열은 Matplotlib의 레이아웃을 명확하게 정의합니다.
예를 들어 plt.subplot(2, 1, 1)은 2개의 행과 1개의 열로 Matplotlib 그림을 플롯하고, 이 플롯이 첫 번째 플롯이 됩니다.
반면에 plt.subplot(2, 1, 2)는 2개의 행과 1개의 열이 있는 두 번째 플롯을 표시합니다.
이 두 플롯을 플롯하면 아래 예제와 같이 서로의 상단에 플롯이 생성됩니다.
import matplotlib.pyplot as plt import numpy as np #플롯 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(2, 1, 1) plt.plot(x,y) #플롯 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(2, 1, 2) plt.plot(x,y) plt.show()
위 예제의 출력은 아래 그림과 같습니다.
다른 예시로, subplot 함수를 사용하여 1개의 행과 2개의 열로 이루어진 두 개의 그림을 플롯해 보겠습니다. 이렇게 하면 플롯이 나란히 표시됩니다.
import matplotlib.pyplot as plt import numpy as np #플롯 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(1, 2, 1) plt.plot(x,y) #플롯 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(1, 2, 2) plt.plot(x,y) plt.show()
위의 예시는 다음 결과를 보여줍니다.
정말 흥미로운 상호 작용이었습니다. 그렇지 않나요? 😃
마지막 한마디
Matplotlib은 파이썬에서 널리 사용되는 시각화 라이브러리입니다. 초보자도 쉽게 사용할 수 있는 대화형 기능과 다양한 기능 덕분에 파이썬에서 플롯을 생성하는 데 있어 매우 강력한 도구입니다.
이 글에서는 원형 플롯, 막대 플롯, 히스토그램, 산점도를 포함하여 Matplotlib 함수들이 생성할 수 있는 다양한 종류의 플롯을 살펴보았습니다.
물론, 파이썬에는 머신러닝 전문가와 데이터 과학자들이 시각화를 만들 때 사용할 수 있는 여러 다른 라이브러리가 있습니다.
Matplotlib을 사용하여 만들 수 있는 더 많은 플롯과 플롯 생성에 사용되는 다양한 함수를 탐색해 볼 수 있습니다.
즐거운 플로팅 되세요! 📉📊