한동안 설 연휴도 있고 학습동아리도 겹치다 보니까 포스팅을 못하고 있었네요
학습 동아리에서 단열선도를 그려봤는데 이걸 포스팅해보겠습니다
그림을 그리려면 왜 이 그림이 필요한지를 알아야겠죠??
단열선도가 무슨 그림인지 알아보겠습니다
단열선도란 쉽게 말하면 하늘의 단면도를 보여주는 그림입니다
정확한 정의는 고층 기상관측을 통한 관측값들을 연직구조를 보거나
대기 중에 다양한 열역학적인 과정들을 이해하기 위한 그림입니다
보통 ASOS나 AWS 기상관측보다는 훨씬 높은 고도의 상태를 보기 위해서 입니다
그럼 당연히 필요한 자료도 종관기상관측 자료가 아니라 고층기상관측 자료가 필요하겠죠??
기상자료를 얻는 법은 정말 간단합니다
기상자료개방포털을 이용하면 아주아주 편리합니다
기상자료개방포털로 접속해서 관측 > 기상관측 > 고층 을 선택하면 이런 페이지가 나옵니다
아래로 조금만 내리면
이렇게 레윈존데를 선택하고 사용할 자료들까지 선택하고 조회를 누르면 미리보기로 나옵니다
고층 관측은 백령도, 오산, 광주, 흑산도, 창원, 포항, 북강릉, 속초, 고산, 국가태풍센터
이렇게 전국에 10개 지점에서만 진행합니다
관측자료는 0시, 6시, 12시, 18시 이렇게 4번 올라오지만
백령도처럼 0시와 12시 2번만 올라오는 곳도 있습니다
제가 가져온 자료는 1월 4일 북강릉의 고층기상관측 자료입니다
1월 4일로 정한 이유는 제가 밤마다 운동을 하러 가는데 유독 4일날 바람이 엄청나게 불어서 선정했습니다
자료를 다운받고 단열선도를 그리기 전에 단열선도의 구조부터 알아보겠습니다
정말 간단한 단열선도의 경우 100 ~ 1000 hPa 까지의 기압, 온도, 이슬점 온도 이렇게 3가지만 있어도 그릴 수 있습니다
자료를 입력하기 전 기본적인 단열선도의 구성입니다
정말 복잡하게 생겼죠? 선들도 굉장히 많지만 구성 자체는 간단합니다
선들의 의미를 알아보겠습니다
- 등압선 : 수평방향의 직선이며 보통 그릴때 100hPa부터 1000hPa까지 그림
- 등온선 : 왼쪽 아래부터 오른쪽 위로 45˚로 기울어진 직선이며 단위는 섭씨온도
- 건조 단열선 : 왼쪽 위부터 오른쪽 아래로 그려져 있는 선이며 왼쪽 아래 방향으로 약간 오목한 선
- 습윤 단열선 (포화 단열선) : 건조 단열선과 똑같이 왼쪽 위부터 오른쪽 아래로 그려져 건조단열선과는
반대로 오른쪽 위 방향으로 볼록
지표와 가까울때는 거의 수직에 가깝지만 고도가 상승할수록 건조단열선과 기울기가 비슷해짐
- 포화혼합비선 : 왼쪽 아래에서 오른쪽 위로 거의 직선에 가깝게 그어진 선들
이렇게 기본적으로 5가지 선들이 있습니다
저희가 가진 자료로 그린 직선과 이 선들을 비교하면서 상층의 대기가 어떤 상태인지 알 수 있는겁니다
이제 metpy로 직접 그려보겠습니다
코드 자체는 크게 가져온 자료에 단위를 적용하는 부분과 그림을 그리는 부분, 두 부분으로 나눠져 있습니다
- 단위 적용
#단위 적용
p = df['p'][0:15].values * units.hPa
t = df['t'][0:15].values * units.degC
td = df['dt'][0:15].values * units.degC
wd = df['wd'][0:15].values * units.degrees
ws = df['ws'][0:15].values * units.knots
metpy에서 자료들은 전부 단위를 입력시켜주어야 하기 때문에 단위를 달아주는 부분입니다
p는 기압으로 hPa, t는 기온으로 degC, td는 이슬점 온도로 degC,
wd는 풍향으로 degrees, ws는 풍속으로 knots 단위를 사용합니다
여기까지는 저번 포스팅에 있는 부분이죠??
다음으로 넘어가보겠습니다
- SkewT 그리기
#mp.calc.components(속도, 방향)
u, v = mc.wind_components(ws, wd)
#Library Import
from metpy.plots import SkewT
import matplotlib.pyplot as plt
#Plot SkewT
fig = plt.figure(figsize = (10, 10))
skew = SkewT(fig)
skew.plot(p, t, 'r', linewidth = 2)
skew.plot(p, td, 'b', linewidth = 2)
skew.plot_barbs(p, u, v)
skew.plot_dry_adiabats()
skew.plot_moist_adiabats()
skew.plot_mixing_lines()
plt.xlabel('Degree Celsius (\u00B0C)', fontsize = 15)
plt.ylabel('hPa (Hectopascal)')
* u, v는 바람의 u방향 성분, v방향 성분으로 SkewT 그림에서 wind barb라는 바람의 방향과 풍속을 그릴 때 사용합니다
fig = plt.figure(figsize = (10, 10))
skew = SkewT(fig)
기본적으로 SktwT 그림은 matplotlib의 figure 안에서 그려집니다
plt.figure로 도화지를 만들고 내가 그릴 그림을 ax로 만들지 않고 SkewT로 만들어서 그리는 거죠
skew.plot(p, t, 'r', linewidth = 2)
skew.plot(p, td, 'b', linewidth = 2)
단열선도에서는 고도를 기압으로 나타내기 때문에 그림에 y축에 그림이 들어가고 x축에 기온이 들어갑니다
하지만 여기서 중요한 건 skwt.plot()을 사용할 때는 skew.plot(x값, y값)의 구성이 아닙니다
skew.plot(기압, 온도)의 구성을 가집니다 (진짜 중요해요!)
skew.plot_barbs(p, u, v)
그리고 아까 위에서 언급한 wind barb 입니다
이 부분의 구성은 skew.plot_barbs(기압, u성분, v성분)입니다
이따 완성된 그림을 보시면 아 저거구나 하고 아실 수 있을 겁니다
skew.plot_dry_adiabats()
skew.plot_moist_adiabats()
skew.plot_mixing_lines()
맨 처음 단열선도 설명에서 언급했던 나머지 기본 등치선들입니다
dry_adiabats는 건조 단열선, moist_adiabats는 습윤 단열선, mixing_lines는 포화 혼합비선입니다
여기서는 파라미터를 따로 정하지 않아도 자동으로 그려집니다
plt.xlabel('Degree Celsius (\u00B0C)', fontsize = 15)
plt.ylabel('hPa (Hectopascal)')
마지막으로 깔끔한 그림을 위해서 x축과 y축의 라벨을 조정해서 결과를 보면
이렇게 결과가 나옵니다
빨간색이 기온선, 파란색이 이슬점 온도 선 입니당
그리고 그림 오른쪽을 보시면 날개 모양의 바람표시들이 잔뜩 있습니다
저것들이 이제 wind barb라고 합니다
고층의 풍속과 풍향을 쉽게 불 수 있기 때문에 자주 그리는 편입니다
오늘은 이렇게 단열선도도 그려봤습니다
다음 포스팅부터는 chat gpt라는 친구를 조금 사용해보려고 합니다
요즘 정말 핫하고 인기가 많은 언어 모델이죠??
저는 이 모델한테 수치모델을 파이썬으로 만들어 달라고 하고 결과물을 확인해보려고 합니다
긴 글 읽어주셔서 감사합니다!!
'파이썬 > metpy' 카테고리의 다른 글
작업20: Metpy로 온도 단위 다뤄보기 (degC, degF) (0) | 2023.01.13 |
---|---|
작업19: Metpy로 단위 변환 해보기 (ito) (3) | 2023.01.11 |
작업18: Metpy로 단위 달아보기 (metpy.units) (2) | 2023.01.10 |