728x90
Matplotlib 기본 사용법¶
Pyplot 소개¶
- matplotlib.pyplot MATLAB과 비슷하게 명령어 스타일로 동작하는 파이썬 시각화 모듈입니다.
기본 그래프¶
In [1]:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('y-label')
plt.show()
In [2]:
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
Out[2]:
[<matplotlib.lines.Line2D at 0x7fc13ab41370>]
스타일 지정¶
: x, y 값 인자에 대해 그래프 선의 색상과 형태를 지정하는 포맷 문자열을 세번째 인자에 입력할 수 있습니다.
In [3]:
plt.plot([10, 20, 30, 40], [1, 4, 9, 16], 'rs--')
plt.show()
- 첫번째값은 색상, 두번째값은 마커 스타일, 세번째값은 선 스타일을 의미합니다.
- 기본 포맷 문자열은 ‘b-‘이고 파란색(‘blue’)와 선(‘-‘)을 의미합니다.
- ‘rs-’는 빨간색(‘red’)와 사각형(‘ㅁ’), 선 모양('--')을 의미합니다.
마커¶
마커의 종류는 다음과 같습니다.
마크 문자 | 의미 |
---|---|
. | point marker |
o | circle marker |
* | star marker |
+ | plus marker |
- 이 외에도 다양한 마커들이 존재합니다.
선 스타일¶
마크 문자 | 의미 |
---|---|
- | solid line style |
-- | dashed line style |
-. | dash-dot line style |
: | dotted line style |
기타 스타일¶
마크 약자 | 의미 |
---|---|
c | 선 색깔 |
lw | 선 굵기 |
ls | 선 스타일 |
maker | 마커 종류 |
mec | 마커 선 색 |
mew | 마커 선 굵기 |
mfc | 마커 내부 색 |
스타일 예시¶
In [4]:
plt.plot([10, 20, 30, 40], [1, 5, 10, 15], c="green",
lw=3, ls="-", marker="o", ms=15, mec="orange", mew=5)
plt.show()
그래프 범위 설정¶
: 그래프를 그릴때 원하는 범위를 설정해줍니다.
In [5]:
plt.plot([10, 20, 30, 40], [1, 5, 10, 15], c="green",
lw=3, ls="-", marker="o", ms=15, mec="orange", mew=5)
plt.xlim(0, 50)
plt.ylim(-30, 30)
plt.show()
그래프 tick 설정¶
: tick 옵션으로 x축과 y축의 라벨을 설정할 수 있습니다.
In [6]:
import numpy as np
X = np.linspace(-np.pi, np.pi, 256)
C = np.cos(X)
plt.plot(X, C)
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi])
plt.yticks([-1, 0, +1])
plt.show()
In [7]:
X = np.linspace(-np.pi, np.pi, 256)
C = np.cos(X)
plt.plot(X, C)
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.yticks([-1, 0, 1], ["Low", "Zero", "High"])
plt.show()
- 다음과 같이 Latex 문자식으로 표현도 가능합니다.
여러 개의 그래프 그리기¶
In [8]:
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'b*', t, t**3, 'gs')
plt.show()
- 다음과 같이 하나의 그래프로 여러값을 표현할 수도 있습니다.
범례¶
: 여러 그래프를 동시에 그릴 경우 각각의 선이 무엇을 나타내는지 표시할 필요가 있습니다. legend 함수를 통해 표현할 수 있으며, loc옵션을 통해 위치를 설정할수도 있습니다.
In [9]:
X = np.linspace(-np.pi, np.pi, 256)
C, S = np.cos(X), np.sin(X)
plt.plot(X, C, ls="--", label="cosine")
plt.plot(X, S, ls=":", label="sine")
plt.legend(loc=2)
plt.show()
x축, y축, 제목 설정¶
: x축, y축의 제목을 설정하고, 가장 큰 제목인 title을 설정합니다.
In [10]:
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()
그래프의 구조¶
- matplotlib는 Figure 객체, Axes 객체, Axis 객체 등으로 구성되어 있습니다.
- Figure는 그림이 그려지는 캔버스나 종이, Axes는 하나의 그래프, Axis는 가로축이나 세로축 등의 축을 의미합니다.
- Figure는 주로 여러개의 그래프를 동시에 그리고 싶을때, 그래프의 크기를 설정하고 싶을때 사용합니다.
figure 사이즈 설정¶
In [11]:
np.random.seed(0)
f1 = plt.figure(figsize=(10, 2))
plt.plot(np.random.randn(100))
plt.show()
- (10,2) 사이즈로 그래프를 설정합니다.
In [12]:
f1 = plt.figure(1)
plt.plot([1, 2, 3, 4], 'b^:')
f2 = plt.gcf()
print(f1, id(f1))
print(f2, id(f2))
plt.show()
Figure(432x288) 140467578724160 Figure(432x288) 140467578724160
- 다음과 같이 현재 사용하는 figure객체를 계속 사용하고 싶을때는 gcf 함수를 명령어를 사용합니다.
subplot¶
- 하나의 윈도우(figure)안에 여러개의 그래프를 표현하고 싶을때 사용하는 명령어입니다.
- 그리드(grid) 형태의 Axes 객체들을 생성하는데 Figure가 행렬(matrix)이고 Axes가 행렬의 원소라고 생각하면 됩니다.
- subplot은 3개의 인자를 가지는데 처음 두개 인자는 전체 그리드 행렬의 모양을 의미하고, 세번째 인자는 여러개의 그래프에서 어느것인지를 의미하는 숫자입니다.
In [13]:
x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)
ax1 = plt.subplot(2, 1, 1) # 위 그래프
plt.plot(x1, y1, 'yo-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')
ax2 = plt.subplot(2, 1, 2) # 아래 그래프
plt.plot(x2, y2, 'r^-')
plt.xlabel('time')
plt.ylabel('Undamped')
plt.tight_layout() # 그래프의 간격을 자동으로 정해주는 옵션입니다.
plt.show()
axes¶
- subplots 명령어를 사용해서 복수의 Axes 객체를 동시에 생성할 수도 있습니다다.
In [14]:
fig, axes = plt.subplots(2, 2) # 2*2 = 4
np.random.seed(0)
axes[0, 0].plot(np.random.rand(5))
axes[0, 0].set_title("axes 1")
axes[0, 1].plot(np.random.rand(5))
axes[0, 1].set_title("axes 2")
axes[1, 0].plot(np.random.rand(5))
axes[1, 0].set_title("axes 3")
axes[1, 1].plot(np.random.rand(5))
axes[1, 1].set_title("axes 4")
plt.tight_layout()
plt.show()
In [15]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
'Python' 카테고리의 다른 글
[python] 파이썬에서 문자열 위치 찾기(find vs index) (0) | 2021.08.23 |
---|---|
dataprep EDA 패키지 (0) | 2021.07.03 |
[Pandas] Pandas Cheat Sheet(Group Data) (0) | 2021.06.24 |
[Pandas] Pandas Cheat Sheet(Combine Data Sets) (0) | 2021.06.22 |
[Pandas] Pandas Cheat Sheet(Make New Columns) (0) | 2021.06.21 |