python의 아주아중 유명한 라이브러리인 matplotlib을 이용해 볼께요
Anaconda 개발환경으로 설치하셨다면, 기본설치가 되어 있어서 바로 이용하실 수 있어요 !
import sys, os import matplotlib.pyplot as plt
라이브러리를 위와 같이 불러와서 plt 입력으로 기능을 이용할 수 있도록 했어요
path = 'C:/Users/Roha/Downloads'
fname1 = "GM11.AT2" fname2 = "GM12.AT2"
fpath = os.path.join(path,fname1)
fpath2 = os.path.join(path,fname2)
이제 GM11, GM12라는 두 개의 지진 데이터를 불러올거에요
파일의 경로를 os모듈을 이용하서 만들어 봤어요!
f = open(fpath, 'r')
lines = f.readlines()
GM = []
for line in lines:
try:
GM.append(float(line))
except ValueError:
pass
f.close()
f = open(fpath2, 'r')
lines = f.readlines()
GM2 = []
for line in lines:
try:
GM2.append(float(line))
except ValueError:
pass
f.close()
두 개 파일의 데이터를
GM, GM2 리스트에 각각 첨부시켰어요.
텍스트 파일의 내용은 문자열로 불러오기 때문에 float을 써서 숫자만 소수로 타입 변환한 뒤 첨부시켰습니다.
print(len(GM),len(GM2))
이렇게 각 데이터의 길이를 출력해보면
8000 4430
이렇게 나타나요. 길이가 서로 달라요
데이터의 x축 값은 0.05s 간격인데요. 데이터의 길이만 큼 x축 리스트를 만들어 줍니다.
numpy를 이용하면 더 간단하지만, 그냥 for문으로 리스트를 만들어도 쉽습니다.
T = []
for i in range(len(GM)):
T.append(i*0.005)
T2 = []
for i in range(len(GM2)):
T2.append(i*0.005)
이렇게 하면 각 데이터의 길이만큼 x축 데이터가 생성되어 T, T2리스트로 작성 되요
print(len(T),len(T2))
8000 4430 이렇게 출력 된답니다.
이제 matplotlib의 기본 기능을 이용해서 그래프를 그려보겠습니다.
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
plt.title('Ground motion')
plt.plot(T,GM, '-c', label='GM11')
plt.plot(T2,GM2, '-r', label='GM12')
plt.xlabel('time')
plt.ylabel('Acceleration, G')
plt.grid(True)
ax.legend()
plt.savefig('GM11_12.pdf',dpi=300)
먼저 fig라는 이름으로 그려질 전체 그래프의 이름을 지어줘요
ax는 subplot이라는 기능으로 작성할 첫번째 그래프의 이름이랍니다.
우선 하나의 그래프를 그려볼게요
add_subplot(1,1,1) 이라고 쓰면
총 1행 1열 그래프에서 첫번째 그래프라는 의미에요
plt.title 로 그래프의 제목을 입력할 수 있어요
plt.plot을 통해 그래프 내용과 속성을 정의할 수 있어요
plt.plot을 여러번 써주면 하나의 그래프에 여러개의 커브를 포함시킬 수 있어요
plt.xlabel
plt.ylabel 을 이용하여 각 축의 라벨을 작성해 줄 수 있어요 !
plt.grid를 통해 그래프내에 그리드 라인을 넣어 줄 수 있어요
ax.legend 통해 레전드를 표시해 줄 수 있답니다.
마지막으로 plt.savefig 기능으로 그래프를 이미지 파일로 저장할 수 있어요
pdf, jpg, png 등 다양한 포멧으로 저장할 수 있어요
dpi 속성을 이용하여 품질을 정해줄 수 있답니다. 상당히 고품질의 이미지를 얻으실 수 있어요
pdf로 저장된 이미지에요
그럼 이번엔 여러 그래프를 그려볼게요
plt.rcParams['figure.figsize'] = [20,18]
fig = plt.figure()
ax = fig.add_subplot(3,1,1)
plt.title('Ground motion')
plt.plot(T,GM, '-c', label='GM11')
plt.plot(T2,GM2, '-r', label='GM12')
plt.xlabel('time')
plt.ylabel('Acceleration, G')
plt.grid(True)
#ax.legend()
ax1 = fig.add_subplot(3,1,2)
plt.title('Ground motion')
plt.plot(T,GM, '-c', label='GM11')
plt.xlabel('time')
plt.ylabel('Acceleration, G')
plt.grid(True)
ax2 = fig.add_subplot(3,1,3)
plt.title('Ground motion')
plt.plot(T2,GM2, '-r', label='GM12')
plt.xlabel('time')
plt.ylabel('Acceleration, G')
plt.grid(True)
plt.savefig('GM11_12.pdf',dpi=300)
3행 1열의 공간에 3개의 그래프를 채워 넣었어요. 공간을 비워두면 빈상태로 출력 되요 !
그리고 아래 코드를 이용해서 그래프의 크기를 조절하였여요
plt.rcParams['figure.figsize'] = [20,18]
그래프 공간을 나누는 기능은 gridspec이란 방법으로도 적용할 수 있는데요
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig3 = plt.figure(constrained_layout=True)
gs = fig3.add_gridspec(3, 3)
f3_ax1 = fig3.add_subplot(gs[0, :])
f3_ax1.set_title('gs[0, :]')
f3_ax2 = fig3.add_subplot(gs[1, :-1])
f3_ax2.set_title('gs[1, :-1]')
f3_ax3 = fig3.add_subplot(gs[1:, -1])
f3_ax3.set_title('gs[1:, -1]')
f3_ax4 = fig3.add_subplot(gs[-1, 0])
f3_ax4.set_title('gs[-1, 0]')
f3_ax5 = fig3.add_subplot(gs[-1, -2])
f3_ax5.set_title('gs[-1, -2]')
plt.savefig('gridspec.pdf',dpi=300)
이렇게 그래프가 차지하는 공간을 아주 자유롭게 지정해 줄 수 있어요 !. !
모두들 즐거운 코딩생활 하세요 ~
#os.path.join #append #파일불러오기 #리스트에추가하기 #float
#try #except #ValueError #예외처리 #add_subplot #subplot #plt #savefig
#그래프저장 #그래프품질 #pdf저장 #dpi #legend #grid #xlabel #ylabel
#plot #fingure #여러개그래프 #하나의그래프창에 #고품질
#gridspec
'파이썬 팁' 카테고리의 다른 글
파이썬으로 번역하기 - 영어 ->독일어 (feat. colab, translate) (0) | 2020.09.26 |
---|---|
파이썬으로 MAC address 추출하는 배치파일 만드는 방법 - uuid (0) | 2020.09.26 |
파이썬 TKinter 라이브러리 - pyimage doesn't exist 오류 해결방법 - 여러 창에 이미지 넣기! (3) | 2020.09.26 |
파이썬 GUI 표준라이브러리 TKinter 재시작 버튼 만들기 (0) | 2020.09.26 |
파이썬 함수안의 변수를 함수 밖에서 호출하는 방법은 ? - 전역 변수 Global (0) | 2020.09.26 |