정보
-
업무명 : 아스키 (ASCII) 형식인 히마와리 8호 (Himawari-8/AHI) 및 Aqua/CERES 기상 위성 자료를 이용한 가시화
-
작성자 : 이상호
-
작성일 : 2019-09-03
-
설 명 :
-
수정이력 :
-
2020-02-08 : 소스 코드 명세 추가
-
내용
[개요]
-
안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.
-
대기과학에서 제공되는 자료 형식은 "CSV, ASCII, 바이너리 이진 자료 (Binary), NetCDF, HDF4, HDF5, Grib, Grb2, Bufr" 등이 있습니다.
-
대부분 용도에 맞게 사용하기 때문에 각각 모든 형식에 맞게 자료 전처리 및 가시화는 필연입니다.
-
예를 들면 기상청의 경우 지상 관측 자료와 기상 위성 자료 및 수치예보 그리고 기타의 경우 각각 "CSV 및 ASCII 형식"와 "NetCDF, HDF4, HDF5" 및 "Grib, Gr2, Bufr" 그리고 "바이너지 이진 자료 (Binary)"로 배포합니다.
-
오늘은 대기과학에서 사용되는 아스키 (ASCII) 설명뿐만 아니라 Python을 이용하여 자료 전처리 및 가시화를 소개해 드리고자 합니다.
[특징]
-
아스키 형태인 기상위성 자료를 이해하기 위해 가시화 도구가 필요하며 이 프로그램은 이러한 목적을 달성하기 위해 고안된 소프트웨어
[기능]
-
히마와리 8호 (Himawari-8/AHI) 및 Aqua/CERES 자료를 산포도
-
히마와리 8호 (Himawari-8/AHI) 및 Aqua/CERES 자료를 매핑
[활용 자료]
-
위성명 : 히마와리 8호 (Himawari-8) 및 Aqua 위성
-
센서명 : AHI 기상영상기 및 CERES
-
자료 종류 : 두 위성에 대한 시/공간 일치
-
영역 : 전구
-
해상도 : 20 km
-
도법 : GEOS
-
기간 : 2016년 10월 01일 - 2016년 10월 01일
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
입력 자료를 동일 디렉터리 위치
-
소스 코드를 실행 (Jupyter notebook 실행)
-
가시화 결과를 확인
[사용 OS]
-
Window 10
[사용 언어]
-
Python v2.7
소스 코드
[명세]
-
라이브러리 읽기
# Library
import pandas as pd
import numpy as np
import sys
import os
import matplotlib.pyplot as plt
from dplython import *
from scipy.stats import linregress
from matplotlib import pyplot as plt
from IPython.display import Image
from mpl_toolkits.basemap import Basemap
from matplotlib.colors import Normalize
import matplotlib
import matplotlib.cm as cm
import seaborn as sns
from scipy.stats import linregress
from matplotlib import rcParams
-
아스키 자료 읽기
-
헤더 정보 없음 (None) 및 탭 ("\s+")으로 구성된 형식
-
1차원 변수 설명
-
위도 : lon
-
경도 : lat
-
태양 천정각 : sza
-
위성 천정각 : vza
-
태양 반짝임 : ga
-
CERES의 알베도 : ceres_albedo
-
CERES의 상향단파복사 : ceres_rsr
-
CERES의 투과율 : ceres_trans
-
CERES의 하향단파복사 : ceres_dsr
-
AHI의 알베도 : albedo
-
AHI의 상향단파복사 : rsr
-
AHI의 투과율 : trans
-
AHI의 하향단파복사 : dsr
-
CERES의 지표면 특성 : ceres_landcover
-
CERES의 청천 비율 : ceres_clear_fraction
-
-
col_name = ["lon", "lat", "sza", "vza", "ga", "ceres_albedo", "ceres_rsr", "ceres_trans", "ceres_dsr",
"albedo", "rsr", "trans", "dsr", "ceres_landcover", "ceres_clear_fraction"]
data = pd.read_csv('scatterplot/Aqua_20161001.OUT', sep='\s+', header=None, names=col_name)
## longitude, Latitude, Solar zenith angle, Viewing zenith angle, Glint angle,
## CERES TOA albedo, CERES rsr,CERES transmittance, CERES DSR
## AHI TOA albedo, AHI rsr,AHI transmittance, AHI DSR
## Landcover, Clear fraction
data.head()
lon lat sza vza ga ceres_albedo ceres_rsr ceres_trans ceres_dsr albedo rsr trans dsr ceres_landcover ceres_clear_fraction
0 164.29890 69.59365 73.14393 79.92245 137.22418 0.28245 111.20666 0.69537 273.78278 0.39584 157.02599 0.41791 165.77931 7.0 80.23878
1 163.81802 69.47059 73.05199 79.73526 137.08733 0.38666 153.04204 0.69396 274.67282 0.43674 173.78233 0.40816 162.38155 7.0 68.69571
2 163.32581 69.34170 72.95692 79.54124 136.96333 0.42737 170.07726 0.69494 276.56042 0.44227 176.42746 0.39861 158.92216 7.0 57.82848
3 162.82117 69.20642 72.85841 79.33984 136.76216 0.50349 201.49466 0.59468 237.98872 0.39389 157.97217 0.47839 191.81958 7.0 74.33212
4 162.30070 69.06348 72.75568 79.12937 136.54288 0.48961 197.07927 0.62871 253.06601 0.39312 158.61792 0.47926 193.38367 7.0 91.84496
-
Data Frame를 통해 L1 전처리
-
최근 데이터 분석에서 사용되는 R의 "dplyr" 라이브러리와 유사한 "dplython"를 사용
-
각 변수에 대한 최대값 및 최소값 설정
-
data_L1 = ( DplyFrame(data) >>
sift( (0 <= X.ceres_rsr) & (X.ceres_rsr <= 1400) ) >>
sift( (0 <= X.ceres_albedo) & (X.ceres_albedo <= 1) ) >>
sift( (0 <= X.ceres_dsr) & (X.ceres_dsr <= 1400) ) >>
sift( (0 <= X.ceres_trans) & (X.ceres_trans <= 1) ) >>
sift( (0 <= X.rsr) & (X.rsr <= 1400) ) >>
sift( (0 <= X.albedo) & (X.albedo <= 1) ) >>
sift( (0 <= X.dsr) & (X.dsr <= 1400) ) >>
sift( (0 <= X.trans) & (X.trans <= 1) ) >>
sift( (0 <= X.sza) & (X.sza <= 80) ) >>
sift( (0 <= X.vza) & (X.vza <= 80) )
)
data_L1.tail()
# data_L1.shape()
lon lat sza vza ga ceres_albedo ceres_rsr ceres_trans ceres_dsr albedo rsr trans dsr ceres_landcover ceres_clear_fraction
217287 107.81293 66.05418 73.27773 78.59733 105.48730 0.37303 145.75923 0.56433 220.50696 0.28871 112.97610 0.56964 222.91913 19.0 20.41717
217288 106.92405 66.16212 73.16970 78.90445 105.58343 0.37566 147.70876 0.57739 227.02570 0.27828 109.64127 0.58441 230.25354 19.0 15.90215
217289 105.58231 66.17186 72.88669 79.24766 105.65680 0.39721 158.72963 0.56058 224.01158 0.31622 126.37793 0.53067 212.12491 19.0 22.54172
217290 104.35141 66.17069 72.62823 79.56327 105.68446 0.41643 168.84651 0.71449 289.69919 0.30908 125.40505 0.54079 219.42899 19.0 25.50954
217291 103.22907 66.16121 72.39342 79.85181 105.72047 0.47973 197.05968 0.56496 232.06946 0.33789 138.89148 0.49999 205.62512 19.0 18.92421
- 가시화를 위한 설정
- 초기 설정
- 크기 : figure
- 스타일 : style
- 폰트 : rc, rcParams
- 지도 해상도 : Basemap
- 변수 설정
- 위도 (lon), 경도 (lat), 대기상단에서의 상향단파복사 (rsr)
- 산포도 설정
- 2D 히스토그램 : histogram2d
- 통계량 : 편이 (Bias), 상대적인 편이 (rBias), 평균제곱근오차 (RMSE), 상대적인 평균제곱근오차 (rRMSE), 기울기 (slope), 절편 (intercept), 상관계수 (R), 유의수준 (Pvalue), 자료 개수 (N)
- 그림 위치에 따른 텍스트 삽입 : annotate
-
히마와리 8호 (Himawari-8/AHI)와 Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 산포도
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
# plt.figure(figsize=(12.5, 10), dpi=600)
plt.figure(figsize=(12.5, 10))
# style
plt.style.use('seaborn-darkgrid')
# plt.style.use('seaborn-whitegrid')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 26
plt.rcParams['xtick.labelsize'] = 26
plt.rcParams['ytick.labelsize'] = 26
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
# x, y setting
X = data_L1.rsr
Y = data_L1.ceres_rsr
# Estimate the 2D histogram
nbins = 250
H, xedges, yedges = np.histogram2d(X, Y, bins=nbins)
# H needs to be rotated and flipped
H = np.rot90(H)
H = np.flipud(H)
# Mask zeros
Hmasked = np.ma.masked_where(H==0,H) # Mask pixels with a value of zero
plt.pcolormesh(xedges, yedges, Hmasked, cmap=cm.get_cmap('rainbow'), vmin=0, vmax=100)
plt.title("Retrieval of Reflected Shortwave Radiation (RSR) \n at the Top of the Atmosphere using Himawari-8 / AHI data\n")
plt.xlabel('Himawari-8 / AHI RSR $\mathregular{[Wm^{-2}]}$')
plt.ylabel('Aqua / CERES RSR $\mathregular{[Wm^{-2}]}$')
# plt.ylabel('Wind Speed (ms$\mathregular{^{-1} }$)')
plt.xlim(0, 1400)
plt.ylim(0, 1400)
plt.grid()
cbar = plt.colorbar()
cbar.ax.set_ylabel('Frequency')
## Bias (relative Bias), RMSE (relative RMSE), R, slope, intercept, pvalue
Bias = np.mean(X-Y)
rBias = (Bias/np.mean(Y))*100.0
RMSE = np.sqrt( np.mean((X-Y)**2) )
rRMSE = (RMSE/np.mean(Y))*100.0
slope = linregress(X, Y)[0]
intercept = linregress(X, Y)[1]
R = linregress(X, Y)[2]
Pvalue = linregress(X, Y)[3]
N = len(X)
lmfit = (slope*X)+intercept
plt.plot(X, lmfit, color='red', linewidth=2)
plt.plot([0, 1400], [0, 1400], color='black')
print(Bias, rBias, RMSE, rRMSE)
print(slope, intercept, R, Pvalue, N)
plt.annotate('CERES = %.2f x (AHI) + %.2f' %(slope, intercept), xy=(20, 1350), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('R = %.2f (p-value < %.2f)' %(R, Pvalue), xy=(20, 1250), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('Bias = %.2f (%%Bias = %.2f %%)' %(Bias, rBias), xy=(20, 1150), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('RMSE = %.2f (%%RMSE = %.2f %%)' %(RMSE, rRMSE), xy=(20, 1050), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('N = %d' %N, xy=(20, 950), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
# plt.savefig("FIG/Scatterplot_Himawari-8_AHI_DSR.png")
plt.show()
-
히마와리 8호 (Himawari-8/AHI)와 Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 산포도
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
# plt.figure(figsize=(12.5, 10), dpi=600)
plt.figure(figsize=(12.5, 10))
# style
plt.style.use('seaborn-darkgrid')
# plt.style.use('seaborn-whitegrid')
# plt.style.use('seaborn-pastel')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 26
plt.rcParams['xtick.labelsize'] = 26
plt.rcParams['ytick.labelsize'] = 26
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
# x, y setting
X = data_L1.dsr
Y = data_L1.ceres_dsr
# Estimate the 2D histogram
nbins = 250
H, xedges, yedges = np.histogram2d(X, Y, bins=nbins)
# H needs to be rotated and flipped
H = np.rot90(H)
H = np.flipud(H)
# Mask zeros
Hmasked = np.ma.masked_where(H==0,H) # Mask pixels with a value of zero
plt.pcolormesh(xedges, yedges, Hmasked, cmap=cm.get_cmap('jet'), vmin=0, vmax=100)
plt.title("Retrieval of Downward Shortwave Radiation (DSR) \n at the Surface using Himawari-8 / AHI data\n")
plt.xlabel('Himawari-8 / AHI DSR $\mathregular{[Wm^{-2}]}$')
plt.ylabel('Aqua / CERES DSR $\mathregular{[Wm^{-2}]}$')
# plt.ylabel('Wind Speed (ms$\mathregular{^{-1} }$)')
plt.xlim(0, 1400)
plt.ylim(0, 1400)
plt.grid()
cbar = plt.colorbar()
cbar.ax.set_ylabel('Frequency')
## Bias (relative Bias), RMSE (relative RMSE), R, slope, intercept, pvalue
Bias = np.mean(X-Y)
rBias = (Bias/np.mean(Y))*100.0
RMSE = np.sqrt( np.mean((X-Y)**2) )
rRMSE = (RMSE/np.mean(Y))*100.0
slope = linregress(X, Y)[0]
intercept = linregress(X, Y)[1]
R = linregress(X, Y)[2]
Pvalue = linregress(X, Y)[3]
N = len(X)
lmfit = (slope*X)+intercept
plt.plot(X, lmfit, color='red', linewidth=2)
plt.plot([0, 1400], [0, 1400], color='black')
print(Bias, rBias, RMSE, rRMSE)
print(slope, intercept, R, Pvalue, N)
plt.annotate('CERES = %.2f x (AHI) + %.2f' %(slope, intercept), xy=(20, 1350), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('R = %.2f (p-value < %.2f)' %(R, Pvalue), xy=(20, 1250), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('Bias = %.2f (%%Bias = %.2f %%)' %(Bias, rBias), xy=(20, 1150), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('RMSE = %.2f (%%RMSE = %.2f %%)' %(RMSE, rRMSE), xy=(20, 1050), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
plt.annotate('N = %d' %N, xy=(20, 950), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
# plt.savefig("FIG/Scatterplot_Himawari-8_AHI_DSR.png")
plt.show()
- 매핑 설정
- 산점도 : scatter
- 컬러바 : colorbar
- 해안선 : drawcostlines, drawcountries, drawmapboundary
- 수평/수직 그리드 : drawparallels, drawmeridians
- 그림 제목 : title
- 그림 위치에 따른 텍스트 삽입 : annotate
-
Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 매핑
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
plt.figure(figsize=(12, 10))
# style
plt.style.use('seaborn-darkgrid')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 22
plt.rcParams['xtick.labelsize'] = 22
plt.rcParams['ytick.labelsize'] = 22
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
# c (crude) < l (low) < i (intermediate) < h (high) < f (full)
# Source: http://seesaawiki.jp/met-python/d/Basemap
x,y = m(data.lon.values, data.lat.values)
val = data.ceres_rsr.values
m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('jet'), alpha=1.0)
m.colorbar(location='right', label='Reflected Shortwave Radiation (RSR) $\mathregular{[Wm^{-2}]}$')
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
plt.title('RSR using Aqua/CERES on the 1 October, 2016 \n')
plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5)) , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
# plt.savefig("FIG/Scane_analysis_Aqua_CERES_RSR.png")
plt.show()
-
히마와리 8호 (Himawari-8/AHI) 자료를 이용한 대기 상단에서의 상향단파복사 매핑
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
plt.figure(figsize=(12, 10))
# style
plt.style.use('seaborn-darkgrid')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 26
plt.rcParams['xtick.labelsize'] = 26
plt.rcParams['ytick.labelsize'] = 26
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
# c (crude) < l (low) < i (intermediate) < h (high) < f (full)
# Source: http://seesaawiki.jp/met-python/d/Basemap
x,y=m(data.lon.values, data.lat.values)
val = data.rsr.values
m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('jet'), alpha=1.0)
plt.colorbar(label='Reflected Shortwave Radiation (RSR) $\mathregular{[Wm^{-2}]}$')
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
plt.title('RSR using Himawari-8/AHI on the 1 October, 2016 \n')
plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5)) , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
# plt.savefig("FIG/Scane_analysis_Himawari-8_AHI_RSR.png")
plt.show()
-
히마와리 8호 (Himawari-8) 및 Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 백분율 오차 매핑
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
plt.figure(figsize=(12, 10))
# style
plt.style.use('seaborn-darkgrid')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 22
plt.rcParams['xtick.labelsize'] = 22
plt.rcParams['ytick.labelsize'] = 22
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
# c (crude) < l (low) < i (intermediate) < h (high) < f (full)
# Source: http://seesaawiki.jp/met-python/d/Basemap
x,y=m(data.lon.values, data.lat.values)
val = ((data.rsr.values - data.ceres_rsr.values)/data.ceres_rsr.values)*100.0
m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=-100, vmax=100, cmap=plt.cm.get_cmap('RdBu'), alpha=1.0)
plt.colorbar(label='Percent Error [%]')
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
plt.title('Percent error between Himwari-8/AHI \n and Aqua/CERES data sets on the 1 October, 2016 \n')
plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5)) , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
# plt.savefig("FIG/Scane_analysis RSR_Percent error_between_AHI and CERES.png")
plt.show()
-
Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 매핑
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
plt.figure(figsize=(12, 10))
# style
plt.style.use('seaborn-darkgrid')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 22
plt.rcParams['xtick.labelsize'] = 22
plt.rcParams['ytick.labelsize'] = 22
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
# c (crude) < l (low) < i (intermediate) < h (high) < f (full)
# Source: http://seesaawiki.jp/met-python/d/Basemap
x,y=m(data.lon.values, data.lat.values)
val = data.ceres_dsr.values
m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('rainbow'), alpha=1.0)
# plt.colorbar(label='Downward Shortwave Radiation (DSR) $\mathregular{[Wm^{-2}]}$')
plt.colorbar(label='Downward Shortwave Radiation (DSR) $\mathregular{[Wm^{-2}]}$')
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
plt.title('DSR using Aqua/CERES on the 1 October, 2016 \n')
plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5)) , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
# plt.savefig("FIG/Scane_analysis_Aqua_CERES_DSR.png")
plt.show()
-
히마와리 8호 (Himawari-8/AHI) 자료를 이용한 지표면에서의 하향단파복사 매핑
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
plt.figure(figsize=(12, 10))
# style
plt.style.use('seaborn-darkgrid')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 22
plt.rcParams['xtick.labelsize'] = 22
plt.rcParams['ytick.labelsize'] = 22
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
# c (crude) < l (low) < i (intermediate) < h (high) < f (full)
# Source: http://seesaawiki.jp/met-python/d/Basemap
x,y=m(data.lon.values, data.lat.values)
val = data.dsr.values
m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('rainbow'), alpha=1.0)
plt.colorbar(label='Downward Shortwave Radiation (DSR) $\mathregular{[Wm^{-2}]}$')
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
plt.title('DSR using Himawari-8/AHI on the 1 October, 2016 \n')
plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5)) , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
# plt.savefig("FIG/Scane_analysis_Himawari-8_AHI_DSR.png")
plt.show()
-
히마와리 8호 (Himawari-8) 및 Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 백분율 오차 매핑
%matplotlib inline
# define plot size in inches (width, height) & resolution(DPI)
plt.figure(figsize=(12, 10))
# style
plt.style.use('seaborn-darkgrid')
# define font size
plt.rc("font", size=22)
plt.rcParams['font.family'] = 'New Century Schoolbook'
# plt.rcParams["font.family"] = "Century Schoolbook"
# rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.weight"] = "bold"
plt.rcParams['axes.labelsize'] = 22
plt.rcParams['xtick.labelsize'] = 22
plt.rcParams['ytick.labelsize'] = 22
plt.rcParams["axes.labelweight"] = "bold"
plt.rcParams["axes.titleweight"] = "bold"
m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
# c (crude) < l (low) < i (intermediate) < h (high) < f (full)
# Source: http://seesaawiki.jp/met-python/d/Basemap
x,y=m(data.lon.values, data.lat.values)
val = ((data.dsr.values - data.ceres_dsr.values)/data.ceres_dsr.values)*100.0
m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=-100, vmax=100, cmap=plt.cm.get_cmap('PiYG'), alpha=1.0)
plt.colorbar(label='Percentage Error [%]')
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
plt.title('Percent error between Himwari-8/AHI \n and Aqua/CERES data sets on the 1 October, 2016 \n')
plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5)) , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
# plt.savefig("FIG/Scane_analysis DSR_Percent error_between_AHI and CERES.png")
plt.show()
[전체]
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
'프로그래밍 언어 > Python' 카테고리의 다른 글
[Python] 파이썬 라디오미터 밝기온도 자료를 이용한 시계열 그래프 (0) | 2019.09.07 |
---|---|
[Python] 파이썬 과학 기술 계산 및 처리에 유용한 패키지 소개 (0) | 2019.09.05 |
[Python] 파이썬 바이너리 (Binary) 형식인 천리안위성 1A호 (COMS/MI) 기상 위성 자료를 이용한 가시화 (0) | 2019.09.03 |
[Python] 파이썬 MOHID 해양순환모델 결과 (남동해역 유속, 수온, 염분)를 이용한 가시화 (0) | 2019.09.03 |
[Python] 파이썬 MOHID 해양순환모델 매핑 : 파일읽기 및 함수 설정 (0) | 2019.08.20 |
최근댓글