[python] pyplot.matplotlib
matplotlib
그래프를 그리는 라이브러리다. matplotlib의 pyplot모듈을 이용한다.
룩이 좀 구리지만 기능 자체는 꽤 쓸만하다.
x값 만들기
```python
x = np.arange(1, 7, 1) # 1부터 7까지 1의 간격으로 숫자 생성.
[1 2 3 4 5 6]
x = np.arange(1, 7, 2)
[1 3 5]
x = np.linspace(1, 6, 6) # 1부터 6까지를 동일한 간격으로 6개의 값으로 나눈다.
[1. 2. 3. 4. 5. 6.]
x = np.linspace(1, 6, 5)
[1. 2.25 3.5 4.75 6. ]
```
2차원 좌표평면값 만들기
```python
# (-1,-1) (-1, -0.99)...(-1, 4) (-0.99, -1) ... (4, 4) 좌표를 먼저 준비한다.
range_x1 = np.arange(-1, 4, 1)
range_x2 = np.arange(-1, 4, 1)
xv, yv = np.meshgrid(range_x1, range_x2)
# method 1
for i in range(5):
for j in range(5):
print("({}, {})".format(xv[i, j], yv[i, j]), end="")
```
```
(-1, -1)(0, -1)(1, -1)(2, -1)(3, -1)(-1, 0)(0, 0)(1, 0)(2, 0)(3, 0)(-1, 1)(0, 1)(1, 1)(2, 1)(3, 1)(-1, 2)(0, 2)(1, 2)(2, 2)(3, 2)(-1, 3)(0, 3)(1, 3)(2, 3)(3, 3)
```
```python
# method 2
xv_col = xv.reshape(xv.size, -1)
yv_col = yv.reshape(yv.size, -1)
a = np.hstack((xv_col, yv_col))
print(a)
```
```python
# method 3 제일 간단하다.
b = np.column_stack((xv.ravel(), yv.ravel()))
print(b)
```
```
[[-1 -1]
[ 0 -1]
[ 1 -1]
[ 2 -1]
[ 3 -1]
[-1 0]
...
```
예제 1 : sin
```python
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 6, 0.1)
y = np.sin(x)
plt.plot(x, y) # 또는 여기만 scatter로 바꿔도 된다.
plt.show()
```
x값은 0부터 6까지 0.1단위로 생성된 값들의 배열이다. [0, 0.1, 0.2 ... 5.9]
y=sin(x)니까 직관적으로 그냥 대입하면 된다.
예제 2 : sin&cos 및 세부사항 설정
```python
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 6, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos", alpha=0.5) #alpha는 반투명
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin & cos")
plt.legend() #도표 설명
plt.show()
```
* 창 여러개 띄우기
이런식으로 하면 창이 두개 떠서 sin과 cos가 다른 창에 그려진다.
```python
plt.figure(1)
plt.plot(x, y1, label="sin")
plt.figure(2)
plt.plot(x, y2, linestyle="--", label="cos")
plt.legend()
plt.show()
```
예제 3 : 이미지
```python
from matplotlib.image import imread
img = imread('C:\BUM\GIT\Python\DLfromScratch\lena.jpg')
plt.imshow(img)
plt.show()
```
예제 4 : 히스토그램
```python
for i, a in activations.items():
plt.subplot(1, len(activations), i+1)
plt.title(str(i+1) + "-layer")
if i != 0: plt.yticks([], [])
# plt.xlim(0.1, 1)
# plt.ylim(0, 7000)
plt.hist(a.flatten(), 30, range=(0,1))
plt.show()
```
한글 지원
분명 OS에는 폰트 설치했는데 matplotlib이 폰트를 못찾아서 한글이 다 □ 로 깨져나올 때가 있다.
이는 matplotlib의 fontlist json 파일이 갱신 되지 않아서 그런 것. rebuild 해주면 해결된다.
```python
>>> from matplotlib import font_manager
>>> font_manager._rebuild()
>>> for i in font_manager.fontManager.ttflist:
... print(i.name, i.fname)
```
'Languages & Frameworks > Python' 카테고리의 다른 글
[python] time, date, datetime (0) | 2017.11.12 |
---|---|
[python] File IO open 함수 및 내장함수 (0) | 2017.09.22 |
[python] asyncio (8) | 2017.08.27 |
[python] ( coroutine / Task )와 비동기 모듈 (0) | 2017.08.25 |
[python] threading, multiprocessing, GIL, concurrent.futures.ThreadPoolExecutor (0) | 2017.08.25 |