파이썬

작업9 : Python으로 파장별 복사에너지 그래프 그리기

이석사 중 2022. 10. 26. 04:46
728x90

 

저번에 포트란으로 계산했던 파장별 복사에너지를 그려보겠습니다


라이브러리)

오늘 필요한 라이브러리는 정말 간단합니다

import pandas as pd
import matplotlib.pyplot as plt
 

csv 파일을 읽어올 pandas와

직접 그림을 그릴 matplotlib 만 있으면 됩니다


결과물)

먼저 저희가 그릴 결과물입니다

 

학생 분이시면 교과서에서 비슷한 그림을 보셨을거라 생각합니다

 


코드분석)

se = pd.DataFrame(pd.read_csv('/content/drive/MyDrive/대기복사학 파일/se.csv'))

fig, ax = plt.subplots(figsize = (15, 9))

ax.plot(se[' lamda'], se['T1'])
ax.plot(se[' lamda'], se['T2'])
ax.plot(se[' lamda'], se['T3'])
ax.plot(se[' lamda'], se['T4'])

ax.set_xlabel('wavelength($\mu$)', fontsize = 15)
ax.set_ylabel('spectral emissive power(W$\ m^-2$ $\mu m^-1$', fontsize = 15)
ax.set_title('Spectral emissive power of a Blackbody', fontsize = 20)

plt.yscale('log')
plt.ylim([1,10e8])
plt.xlim([0, 20])

plt.savefig('/content/drive/MyDrive/대기복사학 파일/blackbody.png', dpi = 200)
 

이번 코드는 matplotlib의 메소드들로 그림을 편집하는 것들이 좀 많습니다

 

하나하나 씩 알아봅시다

 

자료 가져오기)

se = pd.DataFrame(pd.read_csv('/content/drive/MyDrive/대기복사학 파일/se.csv'))
 

pandas 메소드들을 이용해서 /content/drive/Mydrive/대기복사학 파일 경로에 있는 se.csv를 읽어오고

 

DataFrame 형태로 se라는 변수에 저장하겠다 라는 말입니다

 

그림 그리기)

fig, ax = plt.subplots(figsize = (15, 9))

ax.plot(se[' lamda'], se['T1'])
ax.plot(se[' lamda'], se['T2'])
ax.plot(se[' lamda'], se['T3'])
ax.plot(se[' lamda'], se['T4'])
 

먼저 fig로 도화지를 만들고 ax로 빈 그림을 만들겠습니다

 

그림의 사이즈는 15인치 x 9인치로 만들었습니다

 

저희가 가져온 데이터 프레임에는 파장과 복사에너지, 이렇게 2가지 자료가 있습니다

 

파장이 변할 때 복사에너지의 변화를 보고 싶은거니까

 

파장이 x축, 복사 에너지가 y축으로 들어가야 합니다

 

column 이름들은 T1일때, T2일때, T3일때, T4일때를 나타내기 위해 저렇게 정했습니다

 

축 이름과 제목 정하기)

ax.set_xlabel('wavelength($\mu$)', fontsize = 15)
ax.set_ylabel('spectral emissive power(W$\ m^-2$ $\mu m^-1$', fontsize = 15)
ax.set_title('Spectral emissive power of a Blackbody', fontsize = 20)
 

축 이름과 제목은 교과서의 내용 그대로 했습니다

 

여기서 중요한 부분이 수학적 표현 부분입니다

 

수학적 표현 부분은 제가 다음 포스팅에서 전체적으로 정리해드리겠습니다

(내용이 좀 많아요..)

 

축 스케일과 축 크기 정하기)

plt.yscale('log')
plt.ylim([1,10e8])
plt.xlim([0, 20])
 

저는 오늘 포스팅에서 제일 중요한 부분이 이 3줄이라고 생각합니다

 

저희가 구한 복사에너지의 값들은 큰 값은 2억이 넘어가지만 반대로 또 작은 값은 0도 있고

 

0.088 이런 값들도 존재합니다

 

차이가 엄청 크죠??

 

값들의 분포가 매우 넓거나 차이가 클 때는 log scale이라는 방식을 사용합니다

 

지수 방식으로 값을 나타내는 방법입니다

 

만약에 20,000,000이라는 값과 200이라는 값이 있습니다

 

이 값들을 지수 형태로 나타내면

 

2x10^8과 2x10^2 이렇게 표현이 가능하겠죠??

 

앞에 2라는 숫자는 두고 뒤에 지수만 비교를 해서 값을 나타내 줍니다

 

x축과 y축 모두 log scale로 변경이 가능합니다

 

x축을 바꾸려면 plt.xscale, y축을 바꾸려면 yscale로 사용하면 됩니다

 

저희는 복사 에너지인 y축을 바꿔야 하기 때문에 yscale로 했습니다

 

보통 log 값을 기준으로 나타낼 때는 가장 작은 값을 1로 두고 합니다

 

10^0을 기준으로 하기 때문이죠

 

원래 값은 10^-2 정도인 값도 있지만 1부터 나타내기 위해

 

ylim으로 1부터 10^8까지만 나타나게 설정해줬습니다

 

자료들이 뒤쪽으로 갈수록 거의 차이가 없기 때문에 xlim으로 20까지만 잘라냈습니다

 

저장하기)

plt.savefig('/content/drive/MyDrive/대기복사학 파일/blackbody.png', dpi = 200)
 

저희가 만든 그림을 저장하면 끝입니다

 

이런 과정들을 거치면

 

이런 결과물이 나오게 됩니다


Fortran이 아무래도 계산에 특화된 언어다 보니까 실제로 사용할 곳이 마땅히 없습니다

 

그래서 연습하실 분들은 학생분들이시라면 교과서에 공식, 일반적인 분들은 과학적 공식들을 찾아서

 

포트란으로 작성해보시고

 

그림 연습과 자료 분석을 위해 파이썬으로 그려보시는 걸 추천드립니다!

 

이렇게만 하셔도 자료 시각화는 잘 하실 수 있을거라고 생각합니다

 

감사합니다!

 

728x90