오늘은 오랜만에 NCL 포스팅 입니다
기상학에서 많이 사용하는 데이터 포맷인 netCDF 자료를 시각화 해보겠습니다
먼저 코드입니다
fi = addfile("/home/lee/MERRA2_400.tavg1_2d_rad_Nx.20220331.nc4", "r")
time = fi->time
ts = fi->TS({0},:,:)
lat = fi->lat
lon = fi->lon
wks = gsn_open_wks("png", "surface_tem")
res = True
res@gsnLeftString = "Surface Skin Temperature"
res@gsnRightString = "Temperature unis : K"
res@mpCenterLonF = 180
res@cnFillOn = True
res@cnLinesOn = False
res@cnMinLevelValF = 210
res@cnMaxLevelValF = 310
res@cnLevelSpacingF = 10
res@cnFillPalette = "WhiteBlueGreenYellowRed"
plot = gsn_csm_contour_map(wks, ts, res)
하나하나 살펴보겠습니다
1. File 읽기
fi = addfile("/home/lee/MERRA2_400.tavg1_2d_rad_Nx.20220331.nc4", "r")
time = fi->time
ts = fi->TS({0},:,:)
lat = fi->lat
lon = fi->lon
첫 번째 줄은 파일을 읽어오는 부분입니다
NCL을 리눅스 환경에서 사용하기 때문에 /home/lee 라는 경로가 붙고 파일 이름을 적어주시면 됩니다
제가 가져온 자료는 NASA에서 제공하는 자료입니다
https://disc.gsfc.nasa.gov/datasets?project=MERRA-2
GES DISC
disc.gsfc.nasa.gov
제가 가져온 자료는 여기서 받아보실 수 있습니다
보통 이런 자료들은 수정할 수 없게 읽기 전용으로 되어있는 파일들이 많습니다
그렇기 때문에 "r"이라는 것을 붙여줘서 읽기 전용이라는 것을 알려줬습니다
그 아래는 기본적인 변수들입니다
time과 lon, lat는 시간, 경도, 위도이기 때문에 크게 문제는 없고
Temperature Surface를 줄여놓은 TS를 봐야합니다
netCDF 자료는 메타데이터로 한 변수에 대해서 다양한 자료들이 함께 포함된 자료입니다
그렇기 때문에 저는 안에 어떤 변수들이 있는지 확인하기 위해서 python으로 한 번 열어보고 옵니다
pip install netCDF4
from netCDF4 import Dataset
path = '/content/drive/MyDrive/From_EARTHDATA/MERRA2_400.tavg1_2d_rad_Nx.20220331.nc4'
f = Dataset(path)
f.variables()
이 코드를 실행해서 보면
굉장히 많은 자료들이 들어있습니다
여기서 우리가 보고 싶은 TS를 보면
자료의 단위, 차원, 가능한 최대값, 최소값 등 다양한 자료들이 있습니다
여기서 중요한 부분은 unlimited dimensions입니다
time이라고 되어 있는데 처음 netCDF 파일 이름을 보면 20220331로 일 자료입니다
하지만 안에 저장된 값은 1시간 별로 24가지가 들어있습니다
전지구 자료이기 때문에 위도 경도는 변경이 불가능하지만 시간은 0~23시 내의 어떤 시간대든
그려볼 수 있기 때문에 unlimited인 겁니다
추가로 아래 코드를 실행해보면 사진처럼 파일안에 어떤 변수들이 있는지 한 번에 볼 수도 있습니다
2. 파일 시각화
다시 돌아가서 이제 lon, lat, time, ts까지 변수 지정을 완료했습니다
이제 그림을 그리는 부분입니다
wks = gsn_open_wks("png", "surface_tem")
res = True
res@gsnLeftString = "Surface Skin Temperature"
res@gsnRightString = "Temperature unis : K"
res@mpCenterLonF = 180
res@cnFillOn = True
res@cnLinesOn = False
res@cnMinLevelValF = 210
res@cnMaxLevelValF = 310
res@cnLevelSpacingF = 10
res@cnFillPalette = "WhiteBlueGreenYellowRed"
plot = gsn_csm_contour_map(wks, ts, res)
첫 번째 줄을 그림을 저장할 방식을 지정했습니다
저는 png파일로 했고 이름은 surface_tem으로 했습니다
res@gsnLeftString = "Surface Skin Temperature"
res@gsnRightString = "Temperature unis : K"
res@mpCenterLonF = 180
이 부분은 그림의 왼쪽 위와 오른쪽 위에 써줄 글씨를 설정했습니다
왼쪽에는 자료가 무슨 자료인지를 써주었고 오른쪽에는 단위를 써줬습니다
mpCenterLonF는 지도 중심의 경도를 지정해주는 겁니다
res@cnFillOn = True
res@cnLinesOn = False
res@cnMinLevelValF = 210
res@cnMaxLevelValF = 310
res@cnLevelSpacingF = 10
res@cnFillPalette = "WhiteBlueGreenYellowRed"
그림을 contour plot으로 그릴거고 일반 contour가 아니라 속이 찬 contour를 사용할거기 때문에
cnFillOn을 True로 했고 색을 채우는 대신 등온도 선들이 보이지 않게 Lines는 False로 했습니다
다음은 색깔의 시작과 끝을 지정했습니다
이 그림을 그리기 전에 일반 contour를 그려본 결과 210 ~ 310이 자료의 범위였기 때문에
MinLevel은 210으로 MaxLevel은 310으로 해줬습니다
색깔 간격은 칸당 10으로 지정했습니다
색깔 팔레트는 "WhiteBlueGreenYellowRed"로 지정해줬습니다
그리고 마지막으로
plot = gsn_csm_contour_map(wks, ts, res)
이 코드를 작성하고 실행하면
이런 그림이 나오게 됩니다 하지만 color palette가 불연속적인 색깔이라서 끊어져서 보이는게 조금 아쉬웠습니다
palette는 제가 더 찾아보고 부드럽게 연결되는게 있는면 수정해서 추가해보겠습니다
오늘도 이렇게 NCL로 시각화를 해보았는데요
한동안은 해면기압 자료로 등압선들을 그리거나 바람 자료로 벡터장을 그려보는 것들을 할 것 같습니다
긴 글 읽어주셔서 감사합니다!!
'NCL' 카테고리의 다른 글
작업7: NCL로 netCDF 파일 시각화하기3 (0) | 2023.05.03 |
---|---|
작업6: NCL로 netCDF 파일 시각화하기2 (0) | 2023.05.02 |
작업4: NCL로 막대그래프 그려보기3 (0) | 2023.01.06 |
작업3: NCL로 막대그래프 그려보기2 (0) | 2023.01.02 |
작업2: NCL로 막대그래프 그려보기1 (2) | 2023.01.01 |