파이썬/matplotlib

파이썬 basemap으로 일기도 비슷하게 그려보기

이석사 중 2023. 7. 26. 19:52
728x90

오늘은 파이썬으로 일기도를 그려보겠습니다


제가 사용한 자료는 NCAR RDA에서 NCEP GDAS/FNL 0.25도 글로벌 대류권 분석 및 예측 그리드 자료를 사용했습니다

 

시간대는 2023년 7월 24일 06 UTC입니다

 

사용한 투영법은 Lambert Conformal Conic으로 줄여서 lcc라고 부릅니다

 

중심 위경도는 서울 관측소의 위경도를 사용했습니다

 

고기압과 저기압 표시는 plt.text를 사용해서 직접 입력했습니다

 

metpy에 위경도와 기압값, 고기압인지 저기압인지 표시하는 함수도 찾았는데

 

아직은 성공하지 못해서 직접 입력했습니다

 

성공한다면 그것도 올리겠습니다


코드입니다

pip install pygrib
pip install cartopy
pip install basemap_data_hires
pip install basemap

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib import cm

import pygrib
import cartopy
import cartopy.crs as ccrs

file = "/content/drive/MyDrive/gdas1.fnl0p25.2023072406.f00.grib2"

grbs = pygrib.open(file)

for g in grbs:
  print(g) #변수 확인용(필요 없으면 안하셔도 됩니다)
  
grb1 = grbs.select(name = 'Pressure reduced to MSL')[0]

gg = grb1.values/100 #기본적으로 Pa 단위라 hPa로 바꾸기 위해 100으로 나눔

import scipy.ndimage as ndimage

data1 = ndimage.gaussian_filter(data1, sigma = 5, order = 0)
#기압 자료들은 부드럽게 있지 않기 때문에 부드럽게 처리하기 위해서 gaussian_filter를 사용함

plt.figure(figsize = (15, 9))

map = Basemap(projection = 'lcc',
              width = 9000000,
              height = 6000000,
              area_thresh = 100,
              lat_1 = 35.,
              lat_2 = 45.,
              lat_0 = 37.5714,
              lon_0 = 126.9658,
              resolution = 'h')

map.drawcoastlines()
map.drawcountries()
map.drawmapboundary()

#color
map.fillcontinents(color = 'oldlace')
map.drawmapboundary(fill_color = 'lightcyan')

map.drawparallels(np.arange(-80.,81.,10.), labels = [False, True, True, False])
map.drawmeridians(np.arange(-180.,181.,10.), labels = [True, False, False, True])

x, y = map(lon, lat)
cs = map.contour(x, y, data1, levels = np.arange(940, 1040, 2), colors = 'b',
                 algorithm = 'serial', linewidths = 0.7)
plt.clabel(cs, inline = True, fontsize = 8)

plt.title('Synop Chart 2023-07-24 06:00:00 \n Projection : Lambert Conformal Conic')

plt.text(2200000, 400000, "TY2305 DOKSURI \n 930hPa 17.6N 124.6E \n MOV: NW 9KT \n MAX: 97KT", color = 'red',
         fontsize = 15)
plt.text(6880000, 5430000, 'H', fontsize = 30, color = 'b',
         rotation = 30)
plt.text(1400000, 2730000, 'H', fontsize = 30, color = 'b',
         rotation = -30)
plt.text(-50000, 4000000, 'H', fontsize = 30, color = 'b',
         rotation = -30)
plt.text(2200000, 3700000, 'L', fontsize = 30, color = 'r',
         rotation = -30)
plt.text(4500000, 4200000, 'L', fontsize = 30, color = 'r',
         rotation = 10)
plt.text(2800000, 5550000, 'L', fontsize = 30, color = 'r',
         rotation = -20)

plt.show()

 

아래는 결과입니다

태풍이 보여서 방재기상정보시스템을 참고해서 태풍 이름, 중심 기압, 현재 위치, 이동 속도, 최대 풍속

 

자료를 입력해줬습니다

728x90

'파이썬 > matplotlib' 카테고리의 다른 글

작업 1 : ASOS 자료를 이용한 간단한 plot  (0) 2022.03.22