NCL

작업7: NCL로 netCDF 파일 시각화하기3

이석사 중 2023. 5. 3. 20:34
728x90

오늘은 NCL로 0 ~ 23시까지 시간별로 그림을 한 번에 그려보겠습니다


오늘의 코드입니다

fi = addfile("/home/lee/MERRA2_400.tavg1_2d_rad_Nx.20220331.nc4", "r")

time = fi->time
lat = fi->lat
lon = fi->lon
ts = fi->TS

;resorece
res = True
res@gsnRightString = "Temperature unis : K"
res@mpCenterLonF = 180

res@cnFillOn = True
res@cnLinesOn = False
res@cnLevels = ispan(200, 340, 10)
res@cnLevelSelectionMode = "ExplicitLevels"
;res@cnMinLevelValF = 190
;res@cnMaxLevelValF = 340
;res@cnLevelSpacingF = 10


;Repeated sentence
do k =  0, 23
    res@gsnLeftString = "Surface Skin Temperature"+k+""
    wks = gsn_open_wks("png", ""+k+"")
    gsn_define_colormap(wks, "temp1")
    plot = gsn_csm_contour_map(wks, ts(k, :, :), res)
end do

바로 하나씩 보겠습니다


1. File Read

fi = addfile("/home/lee/MERRA2_400.tavg1_2d_rad_Nx.20220331.nc4", "r")

time = fi->time
lat = fi->lat
lon = fi->lon
ts = fi->TS

파일 읽는 부분입니다

 

파일 경로로 읽어오고 변수들을 지정해주었습니다


2. Resource Setting

;resorece
res = True
res@gsnRightString = "Temperature unis : K"
res@mpCenterLonF = 180

res@cnFillOn = True
res@cnLinesOn = False
res@cnLevels = ispan(200, 340, 10)
res@cnLevelSelectionMode = "ExplicitLevels"
;res@cnMinLevelValF = 190
;res@cnMaxLevelValF = 340
;res@cnLevelSpacingF = 10

이번에는 컬러바를 만드는 방식을 조금 다르게 했습니다

 

기존에는 최대, 최소, 간격을 정해서 그렸고 그림에 맞게 알아서 들어가도록 했습니다

 

하지만 이 코드를 다 작성하고 실행해보면서 값의 범위가 자료마다 다르기 때문에

 

색깔이 다르게 나타는 것을 확인했습니다

 

그래서 모든 그림에 대해서 컬러바의 구간이 똑같이 적용되도록 했습니다

 

그래서 cnLevels를 ispan(200, 340, 10)으로 200부터 340까지 10 간격으로 만들어주고

 

cnLevelSelectionMode를 사용해서 cnLevels를 절대참조해서 사용하도록 했습니다

 

나머지 부분은 전부 똑같습니다


3. Loop

;Repeated sentence
do k =  0, 23
    res@gsnLeftString = "Surface Skin Temperature"+k+""
    wks = gsn_open_wks("png", ""+k+"")
    gsn_define_colormap(wks, "temp1")
    plot = gsn_csm_contour_map(wks, ts(k, :, :), res)
end do

24개의 그림을 손으로 그릴 수 없겠져??

 

그래서 반복문을 사용해서 24개의 그림을 그리도록 만들어습니다

 

먼저 그림의 왼쪽 String에는 표면 온도와 시간을 써줬습니다

"+k+"의 형태로 반복문에 따라 입력이 되도록 했습니다

 

사진 정렬이 편하도록 0~23까지의 숫자로 제목을 만들었습니다

 

시간에 따른 surface skin temperature이기 때문에 ts변수에서 시간에 해당하는 dimension 값을

 

반복문에 따라 0~23번째 index로 사용하도록 했습니다

 

이렇게 코드로 그림을 그렸습니다


결과

이렇게 총 24개의 그림이 잘 만들어졌습니다

 

확인차 0번째 그림을 보면

이렇게 잘 그려진 모습입니다

 

이 자료는 2022년 3월 31일 자료입니다

 

그래서 4월 1일 자료도 같은 방식으로 그린 후에 파이썬으로 gif를 만들어보려고 합니다

 

오늘도 긴 글 읽어주셔서 감사합니다!!

728x90