MatPlotlib이란
Matplotlib은 파이썬에서 자료를 차트(chart)나 플롯(plot, a graph showing the relation of two variables)으로 시각화 하는 패키지입니다. Matplotlib은 다음과 같은 정형화된 차트나 플롯 이외에도 저수준 API를 활용한 다양한 시각화 기능을 제공합니다.
- 라인 플롯(line plot)
- 스캐터 프롯(scatter plot)
- 컨투어 플롯(contour plot)
- 서피스 플롯(surface plot)
- 바 차트(bar chart)
- 히스토그램(histogram)
- 박스 플롯(box plot)
matplotlib 및 matplotlib.pyplot 임포트하기
패키지에는 pyplot이라는 서브 패키지가 존재합니다. 이 pyplot 서브 패키지는 매트랩(matlob)이라는 수치 해석 소프트웨어의 시각화 명령을 제공합니다. 간단한 시각화 프로그램을 만드는 경우에는 pyplot 서브 패키지의 명령만으로도 충분합니다.
import matplotlib as mpl
import matplotlib.pyplot as plt
만약 그래프가 출력되지 않는다면
non-interative python의 경우, matplotlib을 활용하여 그래프를 그리면 그 결과로 별도의 Window를 띄웁니다.
다만 주피터 랩(interactive python, ipython)에서는 별도의 윈도우를 띄워서 Figure를 표현하지 않습니다. 이 때문에 경우에 따라서 그래프가 출력되지 않는 경우가 발생합니다. 그 때는 다음처럼 %matplotlib 매직(magic) 명령으로 주피터 내부에 그림을 표시하도록 지정해야합니다.
%matplotlib inline
라인플롯(line plot) - x축의 위치(tick)
x축의 위치를 x틱(tick)이라고 합니다. default는 0,...N -1 범위의 index array입니다.
x축을 지정하려면 두 개의 같은 길이의 리스트 혹은 배열 자료를 넣으면 됩니다.
# x tick으로 0, 1, ..., N-1 범위의 index array가 기본값이 됩니다.
plt.title("plot")
plt.plot([1,4,9,16])
plt.show()
plt.title('x ticks')
plt.plot([10. 20, 30, 40], [1, 4, 9, 16])
plt.show()
plot style 설정하기
- 스타일 설정하는 순서
스타일 문자열은 색상(color), 마커(marker), 선종류(line style)의 순서로 지정한다. 만약 이 중 일부가 생략되면 디폴트 값이 적용됩니다.
plt.plot(t, 0.2 * t **3, 'g^-')
# g -> 그린
# ^ -> 마커 triange_up marker
# - -> solid line
- 색상(color)
색깔을 지정하는 방법은 색 이름 혹은 약자를 사용하거나 # 문자로 시작 되는 RGB 코드를 사용합니다.
- 마커(marker)
데이터 위치를 나타내는 기호를 마커(marker)라고 합니다. 마커의 종류는 다음과 같습니다.
- 선 스타일(Line Style)
선 스타일의 지정 문자열은 다음과 같습니다.
- 기타 스타일
라인 플롯에서는 앞서 설명한 세가지 스타일 color, marker, linestyle 외에 여러가지 스타일을 지정할 수 있습니다.
# 예시
# 다음 코드에서는 선 색상(c)을 b(blue), 선 굵기(lw)를 5, marker를 circle(o), markersize(ms)를 15, 마커 선 색상(mec)을 g(green)으로, 마커 선 굵기(mew)를 5, 마커 내부 색상을 r(red)로 지정하였습니다.
plt.plot(\[10,20,30,40\], \[1,4,9,16\], c = 'b', lw = 5, ls = '--', marker = 'o', ms = 15, mec = 'g', mew = 5, mfc = 'r')
plt.title('스타일 적용 예')
plt.show()
축의 범위 설정하기
플롯 그림을 보면 몇몇 점들은 그림의 범위 경계선에 있어서 잘 보이지 않는 경우가 있을 수 있습니다.
그림의 범위를 수동으로 지정하려면 xlim(최소값, 최대값)과 ylim(최소값, 최대값)을 사용합니다.
이는 x축, y축의 최소값과 최대값을 지정해야합니다.
plt.xlim(0, 50)
plt.ylim(-10, 30)
틱 설정하기
플롯이나 차트에서 축상의 위치 표시 지점을 틱(tick)이라고 하고 이 틱에 써진 숫자 혹은 글자를 틱 라벨(tick label)이라고 합니다. 틱의 위치나 틱 라벨은 맷플롯리브가 자동으로 정해주지만 만약 수동으로 설정하고 싶다면 xticks()이나 yticks()을 사용합니다.
# import numpy as np
# X = np.linspace(-np.pi, np.pi, 256)
# C = np.cos(X)
# plt.title('x축과 y축의 tick label 설정')
# plt.plot(X,C)
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi])
plt.yticks([-1, 0, +1])
# plt.show()
틱 라벨 문자열에는 $$ 사이에 수학 문자식(Mathematical expressions)을 넣을 수도 있습니다. 다양한 mathematical expressions은 아래 링크를 통해 확인할 수 있습니다.
여러 개의 선 그리기
라인 플롯에서 선을 하나가 아니라 여러개를 그리고 싶은 경우에는 x데이터, y데이터, 스타일 문자열을 반복하여 인수로 넘깁니다.
이 경우에는 하나의 선을 그릴 때처럼 x 데이터나 스타일 문자열을 생략할 수 없습니다.
t = np.arange(0., 5., 0.2)
plt.title('라인 플롯에서 여러개의 선 그리기')
plt.plot(t, t, 'r--', t, 0.5 * t**2, 'bs:', t, 0.2 * t **3, 'g^-')
plt.show()
하나의 plot()이 아니라 복수의 plot을 하나의 그림에 겹쳐서 그릴 수도 있습니다.
plt.title("복수의 plot 명령을 한 그림에서 표현")
style1 = {"c":"b", "lw": 5, "ls":"--", "marker":"o", "ms": 15, "mec":"g", "mew":5, "mfc":"r"}
style2 = {"c":"k", "lw": 3, "ls": ":", "marker":"s", "ms": 10, "mec": "m", "mew":5, "mfc":"c"}
plt.plot([1, 4, 9, 16], **style1)
plt.plot([9, 16, 4, 1], **style2)
plt.show()
범례(Legend)
여러개의 라인 플롯을 동시에 그리는 경우에는 각 선이 무슨 자료를 표시하는지를 보여주기 위해 legend 명령으로 범례(legend)를 추가할 수 있습니다. 범례의 위치는 자동으로 정해지지만 수동으로 설정하고 싶으면 loc 키워드 인수를 사용합니다.
아래 예제에서는 각 plot마다 label 키워드 인수를 통해 legend label을 설정하고 legend() 메서드에 loc 키워드 인자에 2를 전달함으로써 좌측 상단에 legend 위치하라고 명시하고 있습니다.
import numpy as np
X = np.linspace(-np.pi, np.pi, 256)
C, S = np.cos(X), np.sin(X)
plt.title("legend를 표시한 플롯")
plt.plot(X, C, ls = "--", label = 'cosine')
plt.plot(X, S, ls = ":", label = 'sine')
plt.legend(loc =2) # upper left
plt.show()
x,y 축 label
플롯의 x 위치와 y축 위치에는 각각 그 데이터가 의미하는 바를 표시하기 위해 라벨(label을 추가할 수 있습니다. 라벨을 붙이려면 xlabel(), ylabel()을 사용합니다.
X = np.linspace(-np.pi, np.pi, 256)
C, S = np.cos(X), np.sin(X)
plt.plot(X, C, label = 'cosine')
plt.xlabel('time')
plt.ylabel('amplitude')
plt.title('Cosine Plot')
plt.show()
요약
'데이터 분석 및 시각화 > 데이터 시각화' 카테고리의 다른 글
[Python] Seaborn(barplot, boxplot, violinplot) (0) | 2023.01.27 |
---|---|
[Python] Seaborn(style 세팅, 카운트 플롯, 히스토그램(displot)) (0) | 2023.01.26 |
[Python] matplotlib - 차트 (0) | 2023.01.26 |
[Python] Matplotlib - 폰트 설정법 (0) | 2023.01.26 |
[Python] Matplotlib - Figure, Axes, Axis, Artist (0) | 2023.01.26 |