-
python-08 matplotlib코딩/python 2023. 5. 4. 19:45
1. matplotlib
matplotlib은 numpy, pandas 등에서 사용되는 자료구조를 쉽게 시각화할 수 있도록 하는 라이브러리이다. plot은 선도를 의미한다.
2. 시각화
import matplotlib as mpl import matplotlib.pyplot as plt
matplolib을 mpl로 불러오고 matplotlib의 pyplot 패키지를 plt로 불러온다.
plt.style.use('classic')
plt의 스타일을 지정한다.
import numpy as np x = np.linspace(0,10,100) print(np.sin(x)) [ 0. 0.1010101 0.2020202 0.3030303 0.4040404 0.50505051 0.60606061 0.70707071 0.80808081 0.90909091 1.01010101 1.11111111 1.21212121 1.31313131 1.41414141 1.51515152 1.61616162 1.71717172 1.81818182 1.91919192 2.02020202 2.12121212 2.22222222 2.32323232 2.42424242 2.52525253 2.62626263 2.72727273 2.82828283 2.92929293 3.03030303 3.13131313 3.23232323 3.33333333 3.43434343 3.53535354 3.63636364 3.73737374 3.83838384 3.93939394 4.04040404 4.14141414 4.24242424 4.34343434 4.44444444 4.54545455 4.64646465 4.74747475 4.84848485 4.94949495 5.05050505 5.15151515 5.25252525 5.35353535 5.45454545 5.55555556 5.65656566 5.75757576 5.85858586 5.95959596 6.06060606 6.16161616 6.26262626 6.36363636 6.46464646 6.56565657 6.66666667 6.76767677 6.86868687 6.96969697 7.07070707 7.17171717 7.27272727 7.37373737 7.47474747 7.57575758 7.67676768 7.77777778 7.87878788 7.97979798 8.08080808 8.18181818 8.28282828 8.38383838 8.48484848 8.58585859 8.68686869 8.78787879 8.88888889 8.98989899 9.09090909 9.19191919 9.29292929 9.39393939 9.49494949 9.5959596 9.6969697 9.7979798 9.8989899 10. ] [ 0. 0.10083842 0.20064886 0.2984138 0.39313661 0.48385164 0.56963411 0.64960951 0.72296256 0.78894546 0.84688556 0.8961922 0.93636273 0.96698762 0.98775469 0.99845223 0.99897117 0.98930624 0.96955595 0.93992165 0.90070545 0.85230712 0.79522006 0.73002623 0.65739025 0.57805259 0.49282204 0.40256749 0.30820902 0.21070855 0.11106004 0.01027934 -0.09060615 -0.19056796 -0.28858706 -0.38366419 -0.47483011 -0.56115544 -0.64176014 -0.7158225 -0.7825875 -0.84137452 -0.89158426 -0.93270486 -0.96431712 -0.98609877 -0.99782778 -0.99938456 -0.99075324 -0.97202182 -0.94338126 -0.90512352 -0.85763861 -0.80141062 -0.73701276 -0.66510151 -0.58640998 -0.50174037 -0.41195583 -0.31797166 -0.22074597 -0.12126992 -0.0205576 0.0803643 0.18046693 0.27872982 0.37415123 0.46575841 0.55261747 0.63384295 0.7086068 0.77614685 0.83577457 0.8868821 0.92894843 0.96154471 0.98433866 0.99709789 0.99969234 0.99209556 0.97438499 0.94674118 0.90944594 0.86287948 0.8075165 0.74392141 0.6727425 0.59470541 0.51060568 0.42130064 0.32770071 0.23076008 0.13146699 0.03083368 -0.07011396 -0.17034683 -0.26884313 -0.36459873 -0.45663749 -0.54402111]
0부터 10사이의 100개의 numpy 배열을 생성하고 sin 값으로 표현한다.
plt.plot(x, np.sin(x))
plt로 시각화한다.
fig = plt.figure() plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) fig.savefig('my_figure.png')
fig.savefig를 사용하여 이미지를 저장한다.
from IPython.display import Image Image('my_figure.png')
이미지를 다시 출력할 수 있다.
2. 여러개의 그래프 표현
plt.subplot(2,1,1) # 세로 2대 1, 가로 1대1, 그래프 순서 plt.plot(x, np.sin(x)) plt.subplot(2,1,2) plt.plot(x, np.cos(x))
subplot으로 두 개의 그래프를 만들 수 있다.
3. 그래프 선 색상과 모양
plt.plot(x, np.sin(x), color='blue') plt.plot(x, np.sin(x-1), color='g') plt.plot(x, np.sin(x-2), color='0.75') plt.plot(x, np.sin(x-3), color='#FFDD44') plt.plot(x, np.sin(x-4), color=(1.0,0.2,0.3)) plt.plot(x, np.sin(x-5), color='chartreuse')
색상을 다양한 방법으로 지정할 수 있다.
plt.plot(x, x+0, linestyle='solid') plt.plot(x, x+1, linestyle='dashed') plt.plot(x, x+2, linestyle='dashdot') plt.plot(x, x+3, linestyle='dotted') plt.plot(x, x+4, linestyle='-') plt.plot(x, x+5, linestyle='--') plt.plot(x, x+6, linestyle='-.') plt.plot(x, x+7, linestyle=':')
여러 가지 방법으로 선의 모양을 지정할 수 있다.
plt.plot(x, x+0, '-g') # solid green plt.plot(x, x+1, '--c') # dashed cyan plt.plot(x, x+2, '-.k') # dashdot black plt.plot(x, x+3, ':r') # dotted red
동시에 사용할 수 있다.
4. 세부조정
plt.plot(x, np.sin(x)) plt.xlim(-1, 11) plt.ylim(-1.5, 1.5)
xlim, ylim을 사용하여 범위를 조정할 수 있다.
plt.plot(x, np.sin(x)) plt.axis([-1,11,-1.5,1.5])
axis 속성으로 동일하게 표현할 수 있다.
plt.plot(x, np.sin(x)) plt.axis('tight')
타이트하게 출력한다.
plt.plot(x, np.sin(x)) plt.axis('equal')
x, y 비율을 동일하게 준다.
5. 라벨링
plt.plot(x, np.sin(x),'-g', label='sin(x)') plt.plot(x, np.cos(x), ':b', label='cos(x)') plt.axis('equal') plt.legend() plt.xlabel('x') plt.ylabel('y') plt.title('Sin and Cos')
그래프의 이름과 x축, y축의 이름을 지정할 수 있다. legend 속성을 사용하여 라벨명을 지정할 수 있다.
6. scatter
x = np.linspace(0,10,30) y = np.sin(x) plt.plot(x, y, '--ok')
---o 모양의 검은색 그래프로 산점도를 표현했다.
plt.plot(x, y,'-p', color='gray', markersize=15, linewidth=4, markerfacecolor='white', markeredgecolor='red', markeredgewidth=2 )
마커 사이즈와 선의 너비 마커 내부, 외부 색깔 등의 속성을 지정할 수 있다.
7. random
# plt.scatter 산점도를 표현 # rand (0~1)의 값을 지정된 숫자 만큼 임의의 값을 만들어 낸다. # randn (0)을 기준으로 편차만큼 떨어진 임의값을 지정된 숫자만큼 만들어 낸다. # randint 지정된 범위안의 정수 1개를 만들어 낸다. plt.style.use('classic') rng = np.random.RandomState(0) x = rng.randn(100) y = rng.randn(100) color = rng.rand(100) sizes = rng.rand(100) * 1000 plt.scatter(x, y, s=sizes, c=color, alpha=0.3, cmap='viridis') # alpha 투명도, cmap 컬러맵이름
랜덤한 그래프를 생성했다.
8. errorbar
x = np.linspace(0,10,50) y = np.sin(x + np.random.randn(50)) plt.errorbar(x, y, yerr=1, fmt='.k') # yerr은 위아래 오차 표시, fmt는 선의 모양
x축은 0부터 10 사이의 50개의 난수 생성, y축은 x축 더하기 -1~1 사이의 값을 50개 더한 후 에러바 함수에 넣는다.
errorbar는 데이터 편차를 시각화 한다.
9. 실습
from sklearn.datasets import load_iris iris = load_iris() features = iris.data.T plt.scatter(features[2],features[3],c=iris.target,s=features[3]*100,alpha=0.2,cmap='viridis') plt.xlabel(iris.feature_names[2]) plt.ylabel(iris.feature_names[3])
iris 데이터를 불러온다. x축과 y축은 feature [1]과 feature [2]로 지정해 준다. label을 통해서 각각 petal width, petal length인 것을 확인할 수 있다. 색깔은 iris의 target이다,
'코딩 > python' 카테고리의 다른 글
python-09 크롤링 (0) 2023.06.19 python-07 pandas (0) 2023.05.04 python-06 numpy (0) 2023.05.04 python-05 예외처리 (0) 2023.05.02