- 개요
대기과학을 하다보면 주로 속도, 온도, 습도와 같은 변수를 다룹니다.
속도는 운동방정식, 온도는 열역학방정식, 습도(혹은 비습)는 강수 때문에(습윤 대기로 가정하면 지배방정식에 들어가지만 대학원 수준에서도 웬만해선 건조 대기로 배움) 이런 변수들을 분석하게 되죠.
이런 변수를 지도에 시각화하려면?
온도, 습도와 같은 변수는 선(contour)이나 음영(shading)을 사용합니다.
하지만 속도의 경우, x방향, y방향 중 한 방향의 속도(속력)은 선과 음영으로 시각화 가능하지만
보통은 x, y방향의 속도를 벡터로 표현해 풍속과 풍향이 한 눈에 보이도록 시각화합니다.
시각화할 때 구글에서 남이 짠 코드를 찾아서 복사, 붙여넣기하는 것이 정석인데
선과 음영을 그린 코드는 많지만 바람 벡터에 대한 코드는 적고,
사실 저도 바람 벡터를 그려본 적이 별로 없어서 지도에 바람 벡터를 방법을 알아보겠습니다.
- 기본 자료
이번 포스트에서는 한반도 지역에서 레이더로 관측한 u_component(x방향 속도, u라 부르겠음), v_component(y방향 속도, v라 부르겠음) 자료를 사용합니다.
이 자료에서 격자 간 간격은 약 1 km이고, 완벽한 등간격이 아니기 때문에 위도, 경도 자료의 차원은 2차원입니다.
물론 u, v 자료도 위도, 경도의 차원과 같음 (정확히는 960 x 960).
원본 자료는 [고도(height) 격자 수 * 960 * 960]로 3차원이지만 고도 2000 m의 한 층만을 시각화합니다.
- 시각화
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
"""
lat, lon, u, v
네 변수 모두 (960, 960)의 차원
"""
# 레이더 자료의 투영법
proj = ccrs.LambertConformal(central_longitude=126, central_latitude=36)
# 레이더 자료의 투영법으로 만든 지도 위에서 각종 위도, 경도 범위 등을 지정할 때 쓰기 위한 투영법
plt_crs = ccrs.PlateCarree()
fig = plt.figure()
ax = fig.add_subplot(111, projection=proj)
ax.set_extent([125, 129.2, 35.6, 39.0], crs=ccrs.PlateCarree()) # 그림 그릴 영역
ax.coastlines() # 해안선 추가
gl = ax.gridlines(draw_labels=True, x_inline=False, y_inline=False)
gl.xlabel_style = {'rotation':45} # 경도 라벨(xlabel)이 경도선 방향이라 수직으로 적히므로 회전
gl.top_labels=False # 벡터에 대한 설명을 top에 적을거라 꺼야함
gl.right_labels=False
intv = 15 # 간격이 너무 좁아 벡터가 겹치므로 15칸마다 벡터를 그림
# scale값을 지정하여 지도 위에 그려지는 벡터 크기 조절
quiver = ax.quiver(lon[::intv,::intv], lat[::intv, ::intv], u[::intv, ::intv], v[::intv, ::intv],
scale=0.0008, transform=plt_crs, scale_units='xy')
"""
quiverkey를 이용해 벡터 크기에 대한 정보 추가
ax.quiverkey(quiver, x좌표, y좌표, 벡터 크기, 설명, 벡터와 설명의 위치)
labelpos는 'N' 'S' 'E' 'W'를 선택할 수 있으며
'E'면 벡터의 동쪽(오른쪽)에 설명이 위치함, N: 북쪽, S: 남쪽, E: 동쪽, W: 서쪽
"""
ax.quiverkey(quiver, 0.85, 1.05, 15, '15 m/s', labelpos='E')
plt.suptitle(f"Wind vector") # 타이틀 제목을 적지 않으면 quiverey가 안 보임
plt.show()
'대기과학 > 프로그래밍' 카테고리의 다른 글
[MetPy] 단열선도 그리기 (1) | 2024.06.11 |
---|---|
[MetPy] 튜토리얼: 알아보고 설치해보자 (1) | 2024.06.10 |
[기상청 API][ASOS 시간(hourly) 자료 다운로드] 2. 장기간 자료 다운로드 받기 (1) | 2024.05.29 |
[기상청 API][ASOS 시간(hourly) 자료 다운로드] 1. 기본 제공 URL 사용 (0) | 2024.05.24 |
관측 자료의 결측을 시각화하기 (0) | 2024.05.22 |