저번 포스팅에 이어서
그래프로 시각화하는 여러 방식을 살핀다
이번엔 그래프 뿐만 아니라, 만든 그래프를 파일로 저장하는 방법과
다른 tkinter모듈을 이용하여 창에 붙이는 방법도 알아본다.
히스토그램 그리기
256개 8비트로 표현할 수 있는 색상
gray 계열은 0이 검 256이 흰색이다
(참고로 2의8승-1은 2의7승 + 2의 6승 ...~2의0승 까지의 합 이다.)
이러한 gray이미지 3개가 모여서 rgb컬러를 만들게 된다.
히스토그램은 다음같이 만든다
x=np.random.randn(1000)
plt.hist(x,bins=20)
이것을 아래에있는 tk인터에 붙이는 방식으로도 가능하다.
tk인터에 그래프 붙이기(캔버스를 만들어서 그래플르 붙인다.)
gui의 일반적인 구성에서 가장큰것이 윈도우창 또는 프레임 이라하고
각종 위젯을 그 안에 만든다
여기서 그래프를 붙이려면 캔버스를 만들어서 여기에 붙이는 방식으로
진행한다.
다음과 같다.
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
fig=plt.figure()
data=np.random.rand(1024,2)
plt.scatter(data[:,0],data[:,1])
w=tk.Tk()
c=FigureCanvasTkAgg(fig,master=w)
c._tkcanvas.pack(side=tk.TOP,fill=tk.BOTH,expand=1)
w.mainloop()
파이썬 tk에서 여러개의 화면 띄우기
moduleA.py 등으로 저장하면
이걸 나중에 import해서 깔끔하게 올릴수 있다.
여러 그래프 한 화면에 독립적으로 그리기
그리드를 사용하여 붙이되 subplot2gird 함수를 사용한다
그래프의 크기는 그리드 내에 rowspan과 colspan=1 등으로 크기를 정할수 있다.
fig,(g1,g2)=plt.subplots(nrows=2,ncols=1) #nrows는그래프의 개수로 생각한다.
x=np.random.randn(1000)
g1.hist(x,bins=20)
data=np.random.rand(1024,2)
g2.scatter(data[:,0],data[:,1])
w=tk.Tk()
c=FigureCanvasTkAgg(fig,master=w)
c._tkcanvas.pack()
w.mainloop()
이렇게 할수 있다.
산점도 여러개를 그릴때 색깔로 구분하기
A=np.random.standard_normal((100,2))
A+=np.array((-1,-1))
B=np.random.standard_normal((100,2))
B+=np.array((1,1))
plt.scatter(A[:,0],A[:,1],color='0.25')
plt.scatter(B[:,0],B[:,1],color='1',edgecolor='0')
plt.show()
이렇게 한다
머신러닝에 자주쓰이는 그래프
li=(b'Iris-setosa',b'Iris-versicolor',b'Iris-virginica')
def readli(label):
return li.index(label)
data=np.loadtxt('iris.data.txt',delimiter=',',converters={4:readli})
colorset=('0','0.5','0.75')
colorli=[colorset[int(label)] for label in data[:,4]]
plt.scatter(data[:,0],data[:,1],color=colorli)
plt.show()
이 그래프를 아래의 이미지 추출하는 코드에서 적용해 본다.
그래프의 선모양 조절하는 법(linstyle 라인 스타일 ls를 사용)
def pdf(x,mu,sigma):
a=1/(sigma*np.sqrt(2*np.pi))
b=-1/(2*sigma**2)
return a*np.exp(b*(x-mu)**x)
x=np.linspace(-6,6,1024)
plt.plot(x,pdf(x,0,1),color='k',linestyle='solid',linewidth=3.5)
plt.plot(x,pdf(x,0,5),color='k',ls='dashed',lw=5)
plt.plot(x,pdf(x,0,0.25),color='k',ls='dashdot',lw=5)
그래프 채우는 방법(hatch함수로 채운다.)
다음과 같다.
n=8
a=np.random.random(n)
b=np.random.random(n)
plt.bar(range(n),a,color='w', hatch='x', edgecolor='k') #hatch함수로 채운다.
plt.bar(range(n),a+b, bottom=a, color='w', hatch='/', edgecolor='k')
plt.show()
그래프 제목,레이블,텍스트 추가하기(엑셀과 유사하다 함)
n=8
a=np.random.random(n)
b=np.random.random(n)
plt.bar(range(n),a,color='w', hatch='x', edgecolor='k')
plt.bar(range(n),a+b, bottom=a, color='w', hatch='/', edgecolor='k')
plt.title('bar graph') #여기서부터 네이밍이다 핵심임
plt.xlabel('x coord=x')
plt.ylabel('y coord=y')
plt.text(4.5,1.0,'focus on')
plt.show()
그래프 눈금 간격 조정하기
x=np.linspace(-15,15,1024)
y=np.sinc(x)
ax=plt.axes()
ax.xaxis.set_major_locator(ticker.MultipleLocator(5)) #x축의 간격을 몇으로 할지 정한다(예로 이건 5씩 증가)
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1)) #y축의 간격을 몇으로 할지 정한다(예로 이건 1씩 증가)
plt.plot(x,y,c='k')
plt.grid(True, which='both') #이게 있어야 눈금이 그려진다
plt.show()
그래프 축 범위 설정하기 (라인스페이스와 xlim 등을 이용한다)
x=np.linspace(-10,20,1024)
plt.xlim(-10,20)
plt.ylim(-0.5,1.5)
plt.plot(x,np.sinc(x), c='k')
plt.show()
그래프안의 그래프 추가
다음과 같이 한다.
x=np.linspace(-6,6,1024)
plt.plot(x,np.sinc(x),c='k')
a=plt.axes([0.6,0.6,0.25,0.25])
x=np.linspace(-3,3,1024)
a.plot(x,np.sinc(x),c='k')
plt.setp(a)
plt.show()
그래프를 이미지 파일로 저장하기
아나콘다의 그래프를 우클릭하는 방법도 있지만
코드로 저장하는 방법이 있다.
이 방법으로 투명한 그래프도 저장이 가능하다.(transparent=True)를 넣어서 가능
li=(b'Iris-setosa',b'Iris-versicolor',b'Iris-virginica')
def readli(label):
return li.index(label)
data=np.loadtxt('iris.data.txt',delimiter=',',converters={4:readli})
colorset=('0','0.5','0.75')
colorli=[colorset[int(label)] for label in data[:,4]]
plt.scatter(data[:,0],data[:,1],color=colorli)
plt.savefig('machine_trans.png',transparent=True,dpi=300) #투명한 배경의 파일 만들기 + 해상도 300올리기
plt.savefig('machine_300.png',dpi=300) #해상도 300올리기
plt.show()
이걸로 하면 나온다
'관 > 핫한 파이썬 공부' 카테고리의 다른 글
파이썬의 여러 모듈 공부하기 08. (0) | 2019.12.16 |
---|---|
파이썬의 여러 모듈 공부하기 07. (0) | 2019.11.18 |
파이썬의 여러 모듈 공부하기 05. (0) | 2019.11.02 |
파이썬의 여러 모듈 공부하기 04. (0) | 2019.11.02 |
파이썬의 여러 모듈 공부하기 03. (0) | 2019.11.02 |
댓글