정보
-
업무명 : HDF 형식인 천리안위성 1A호 (COMS/MI) 기상위성 자료를 이용한 가시화
-
작성자 : 이상호
-
작성일 : 2019-10-22
-
설 명 :
-
수정이력 :
-
2020-02-06 : 소스 코드 명세 추가
-
내용
[개요]
-
안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.
-
일반적으로 기상 자료의 경우 자료값뿐만 아니라 조건으로 기록된 메타 데이터 정보가 있습니다. 이러한 메타 정보는 적절하게 관리하기 위해서 필연입니다. 일반적으로 기상청에서 제공하는 자료는 독자적 또는 범용 바이너리 및 텍스트로 제공하고 있습니다.
-
텍스트의 경우 매우 간단한 형식이기 때문에 사용 OS에 관계없이 내용을 확인할 수 있는 범용성이 있습니다. 그러나 메타 정보를 쓰기에 편리하나 사용자가 읽기에는 다수의 문자열로 인해 어렵습니다.
-
범용 바이너리 형식 중에 하나인 HDF는 하나의 파일에 계층 구조를 갖으며 데이터 (문자, 숫자, 행렬, 이미지 등)를 저장할 수 있습니다. 또한 메타 정보에 대해 쓰기 및 읽기의 경우 텍스트 형식에 비해 조작이 간단하며 이해하기 쉽습니다.
-
"The HDF Group"의 공식 사이트에서 소개한 바에 따르면 HDF는 I/O 속도도 빠르고 대용량 데이터도 처리할 수 있는 오픈 소스 포맷일 뿐만 아니라 학술 연구에서 산업까지 폭 넓은 분야에서 사용할 수 있다고 합니다. 또한 최근 4차 산업혁명 (AI) 시대에 사용되는 "keras"과 "chainer" 등의 신경망 라이브러리 학습 결과를 저장하는 방식으로 이용되고 있습니다.
-
따라서 대기과학에서 사용되는 HDF5 설명뿐만 아니라 Python을 이용하여 자료 전처리 및 가시화를 소개해 드리고자 합니다.
[특징]
-
HDF 형태인 기상위성 자료를 이해하기 위해 가시화 도구가 필요하며 이 프로그램은 이러한 목적을 달성하기 위해 고안된 소프트웨어
[기능]
-
천리안위성 1A호 (COMS/MI) 기상위성 자료를 이용한 가시화
[활용 자료]
-
위성명 : 천리안위성 1A호 (COMS)
-
센서명 : MI 기상영상기
-
자료종류 : 에어로졸 광학두께
-
영역 : 북반구
-
해상도 : 5 km
-
도법 : GEOS
-
확장자 : .hdf
-
기간 : 2014년 02월 01일 0000 UTC (0900 KST)
-
위/경도 자료
-
기상위성 자료에 필요한 입력 자료 (위도 및 경도, 복사량 변환 테이블) 소개
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
입력 자료를 동일 디렉터리 위치
-
소스 코드를 실행 (Jupyter notebook 실행)
-
가시화 결과를 확인
[사용 OS]
-
Windows 10
[사용 언어]
-
Python 2.7
소스 코드
[명세]
-
라이브러리 읽기
-
HDF5 읽기 : h5py
-
데이터 전처리 : dplython
-
가시화 : matplot
-
# Library
import pandas as pd
import numpy as np
import sys
# import iris
import os
import matplotlib.pyplot as plt
from dplython import *
# (DplyFrame, X, diamonds, select, sift, sample_n,
# sample_frac, head, arrange, mutate, group_by, summarize, DelayFunction)
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
from netCDF4 import Dataset
import struct
import binascii
from mpl_toolkits.basemap import addcyclic
from netCDF4 import num2date, date2num, date2index
import datetime
from pyhdf.SD import SD, SDC
import h5py
-
HDF5 위/경도 파일 읽기
hdffile = 'MI/coms_cn_geos_lonlat.hdf'
hdffile_sd = SD(hdffile, SDC.READ)
print(hdffile_sd.info())
-
HDF5 위/경도 헤더 보기
-
원도우 (Window)에서 ncdump를 사용할 경우 Anaconda Cloud에서 "conda install -c anaconda hdf5" 설치 필요
-
ncdump 외에 The HDF Group에서 제공하는 "hdfview" 도구가 있으니 참고 바램
-
!hdp dumpsds -h MI/coms_cn_geos_lonlat.hdf
File name: MI/coms_cn_geos_lonlat.hdf
Variable Name = Lat
Index = 0
Type= 32-bit floating point
Ref. = 2
Compression method = NONE
Rank = 2
Number of attributes = 0
Dim0: Name=fakeDim0
Size = 1544
Scale Type = number-type not set
Number of attributes = 0
Dim1: Name=fakeDim1
Size = 1934
Scale Type = number-type not set
Number of attributes = 0
Variable Name = Lon
Index = 1
Type= 32-bit floating point
Ref. = 4
Compression method = NONE
Rank = 2
Number of attributes = 0
Dim0: Name=fakeDim2
Size = 1544
Scale Type = number-type not set
Number of attributes = 0
Dim1: Name=fakeDim3
Size = 1934
Scale Type = number-type not set
Number of attributes = 0
-
HDF5 위/경도 파일에서 세부 정보 보기
- 위도, 경도에 대해 2차원 배열을 지님
# select sds
lat_sds = hdffile_sd.select('Lat')
lon_sds = hdffile_sd.select('Lon')
lat2D = lat_sds.get() # get sds data
lon2D = lon_sds.get()
print(lat2D.shape,lon2D.shape)
((1544L, 1934L), (1544L, 1934L))
-
HDF5 에어로졸 광학두께 읽기
-
해당 산출물에 대한 값 (values) 및 목록 (items) 확인
-
h5file = h5py.File('MI/coms_mi_le2_aod_cn_201402010000.h5', 'r')
# print(list(h5file['Product/'].keys()))
print(h5file['Product/'].values())
print(h5file['Product/'].items())
[<HDF5 dataset "Aerosol_Optical_Depth": shape (1544, 1934), type "<i2">, <HDF5 dataset "Aerosol_Optical_Depth_Quality_Flag": shape (1544, 1934), type "|i1">, <HDF5 dataset "Aerosol_Optical_Depth_Visibility": shape (1544, 1934), type "<i2">]
[(u'Aerosol_Optical_Depth', <HDF5 dataset "Aerosol_Optical_Depth": shape (1544, 1934), type "<i2">), (u'Aerosol_Optical_Depth_Quality_Flag', <HDF5 dataset "Aerosol_Optical_Depth_Quality_Flag": shape (1544, 1934), type "|i1">), (u'Aerosol_Optical_Depth_Visibility', <HDF5 dataset "Aerosol_Optical_Depth_Visibility": shape (1544, 1934), type "<i2">)]
-
HDF5 에어로졸 광학두께 헤더 보기
!h5dump -A MI/coms_mi_le2_aod_cn_201402010000.h5
HDF5 "MI/coms_mi_le2_aod_cn_201402010000.h5" {
GROUP "/" {
GROUP "Basic_Information" {
ATTRIBUTE "CMDPS_Version" {
DATATYPE H5T_STRING {
STRSIZE 10;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "cmdps_v4.0"
}
}
ATTRIBUTE "Data_Format" {
DATATYPE H5T_STRING {
STRSIZE 4;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "HDF5"
}
}
ATTRIBUTE "Image_Observation_Area" {
DATATYPE H5T_STRING {
STRSIZE 2;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "cn"
}
}
ATTRIBUTE "Image_Observation_Time" {
DATATYPE H5T_STRING {
STRSIZE 13;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "20140201.0000"
}
}
ATTRIBUTE "Product_Name" {
DATATYPE H5T_STRING {
STRSIZE 4;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "AOD2"
}
}
ATTRIBUTE "Satellite_Name" {
DATATYPE H5T_STRING {
STRSIZE 4;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "coms"
}
}
ATTRIBUTE "Used_Channels" {
DATATYPE H5T_STRING {
STRSIZE 5;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "\000\000\000\000\000"
}
}
}
GROUP "Map_Projection_Information" {
ATTRIBUTE "Central_Lat" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 0
}
}
ATTRIBUTE "Central_Lon" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 128.2
}
}
ATTRIBUTE "Column_Offset" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 967
}
}
ATTRIBUTE "Column_Scaling_Factor" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 10212669
}
}
ATTRIBUTE "EW_Resolution" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 4
}
}
ATTRIBUTE "Image_Boundary_Position" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SIMPLE { ( 2, 4 ) / ( 2, 4 ) }
DATA {
(0,0): -999, -999, -999, -999,
(1,0): -999, -999, -999, -999
}
}
ATTRIBUTE "Line_Offset" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 1263
}
}
ATTRIBUTE "Line_Scaling_Factor" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): -10212669
}
}
ATTRIBUTE "Map_Projection_Name" {
DATATYPE H5T_STRING {
STRSIZE 4;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "GEOS"
}
}
ATTRIBUTE "NS_Resolution" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 4
}
}
ATTRIBUTE "Radius_of_Earth" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 6.37e+006
}
}
}
GROUP "Product" {
ATTRIBUTE "Number_of_Parameter" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 7
}
}
ATTRIBUTE "Total_Data_Size" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 119443840
}
}
DATASET "Aerosol_Optical_Depth" {
DATATYPE H5T_STD_I16LE
DATASPACE SIMPLE { ( 1544, 1934 ) / ( 1544, 1934 ) }
ATTRIBUTE "Data_Type" {
DATATYPE H5T_STRING {
STRSIZE 9;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "STD_I16LE"
}
}
ATTRIBUTE "Maximum" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 5
}
}
ATTRIBUTE "Minimum" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 0
}
}
ATTRIBUTE "Number_of_Bits_per_Pixel" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 10
}
}
ATTRIBUTE "Number_of_Columns" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 1934
}
}
ATTRIBUTE "Number_of_Lines" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 1544
}
}
ATTRIBUTE "Offset" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 0
}
}
ATTRIBUTE "Scaling_Factor" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 0.00488759
}
}
ATTRIBUTE "Undef_Code" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 32767
}
}
ATTRIBUTE "Unit" {
DATATYPE H5T_STRING {
STRSIZE 1;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "."
}
}
ATTRIBUTE "Variable_Long_Name" {
DATATYPE H5T_STRING {
STRSIZE 21;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "Aerosol_Optical_Depth"
}
}
}
DATASET "Aerosol_Optical_Depth_Quality_Flag" {
DATATYPE H5T_STD_I8LE
DATASPACE SIMPLE { ( 1544, 1934 ) / ( 1544, 1934 ) }
ATTRIBUTE "Data_Type" {
DATATYPE H5T_STRING {
STRSIZE 8;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "STD_I8LE"
}
}
ATTRIBUTE "Maximum" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 160
}
}
ATTRIBUTE "Minimum" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 64
}
}
ATTRIBUTE "Number_of_Bits_per_Pixel" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 8
}
}
ATTRIBUTE "Number_of_Columns" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 1934
}
}
ATTRIBUTE "Number_of_Lines" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 1544
}
}
ATTRIBUTE "Offset" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 128
}
}
ATTRIBUTE "Scaling_Factor" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 1
}
}
ATTRIBUTE "Undef_Code" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 127
}
}
ATTRIBUTE "Unit" {
DATATYPE H5T_STRING {
STRSIZE 1;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "."
}
}
ATTRIBUTE "Variable_Long_Name" {
DATATYPE H5T_STRING {
STRSIZE 34;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "Aerosol_Optical_Depth_Quality_Flag"
}
}
}
DATASET "Aerosol_Optical_Depth_Visibility" {
DATATYPE H5T_STD_I16LE
DATASPACE SIMPLE { ( 1544, 1934 ) / ( 1544, 1934 ) }
ATTRIBUTE "Data_Type" {
DATATYPE H5T_STRING {
STRSIZE 9;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "STD_I16LE"
}
}
ATTRIBUTE "Maximum" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 29.0737
}
}
ATTRIBUTE "Minimum" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 1.58056
}
}
ATTRIBUTE "Number_of_Bits_per_Pixel" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 10
}
}
ATTRIBUTE "Number_of_Columns" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 1934
}
}
ATTRIBUTE "Number_of_Lines" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 1544
}
}
ATTRIBUTE "Offset" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 0
}
}
ATTRIBUTE "Scaling_Factor" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SCALAR
DATA {
(0): 0.0293255
}
}
ATTRIBUTE "Undef_Code" {
DATATYPE H5T_STD_I32LE
DATASPACE SCALAR
DATA {
(0): 32767
}
}
ATTRIBUTE "Unit" {
DATATYPE H5T_STRING {
STRSIZE 1;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "."
}
}
ATTRIBUTE "Variable_Long_Name" {
DATATYPE H5T_STRING {
STRSIZE 32;
STRPAD H5T_STR_SPACEPAD;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "Aerosol_Optical_Depth_Visibility"
}
}
}
}
}
}
-
HDF5 에어로졸 광학두께에서 세부 정보 보기
-
키 및 목록 확인
-
# print(coms_aod_file)
ls = list(h5file.keys())
print('list : ',ls)
h5file_aod = h5file.get(u'Product/Aerosol_Optical_Depth')
print('data : ',h5file_aod)
('list : ', [u'Basic_Information', u'Map_Projection_Information', u'Product'])
('data : ', <HDF5 dataset "Aerosol_Optical_Depth": shape (1544, 1934), type "<i2">)
-
HDF5 에어로졸 광학두께에서 모든 속성 정보 보기
-
키 및 목록 확인
-
attrs_key = list(h5file_aod.attrs.keys())
attrs_value = list(h5file_aod.attrs.values())
print(attrs_key)
print(attrs_value)
[u'Number_of_Columns', u'Number_of_Lines', u'Number_of_Bits_per_Pixel', u'Offset', u'Scaling_Factor', u'Unit', u'Maximum', u'Minimum', u'Undef_Code', u'Variable_Long_Name', u'Data_Type']
[1934, 1544, 10, 0.0, 0.0048875855, '.', 5.0, 0.0, 32767, 'Aerosol_Optical_Depth', 'STD_I16LE']
-
HDF5 에어로졸 광학두께에서 디지털 수 (Digital Number) 가져오기
-
배열 출력
-
디지털 수 출력
-
dn = h5file['Product/Aerosol_Optical_Depth'][:]
print(dn.shape)
print(dn)
(1544L, 1934L)
[[32767 32767 32767 ..., 32767 32767 32767]
[32767 32767 32767 ..., 32767 32767 32767]
[32767 32767 32767 ..., 32767 32767 32767]
...,
[32767 32767 32767 ..., 32767 32767 32767]
[32767 32767 32767 ..., 32767 32767 32767]
[32767 32767 32767 ..., 32767 32767 32767]]
-
각 변수에 대해 전처리
-
dplython를 이용하기 위해서 1차원 필요
-
2차원 변수 (위도, 경도, 디지털 수)를 1차원으로 변환
-
# 2D배열을 1D로 변환
lon1D = np.reshape(lon2D, (1,np.product(lon2D.shape)))[0]
lat1D = np.reshape(lat2D, (1,np.product(lat2D.shape)))[0]
dn1D = np.reshape(dn, (1,np.product(dn.shape)))[0]
print(lat1D.shape)
print(lon1D.shape)
print(dn1D.shape)
(2986096L,)
(2986096L,)
(2986096L,)
-
Data Frame 설정
-
1차원 위도, 경도, 디지털 수
-
data = pd.DataFrame( np.column_stack( [lat1D, lon1D, dn1D] ), columns=['lat', 'lon', 'dn'] )
data.head()
lat lon dn
0 -999.0 -999.0 32767.0
1 -999.0 -999.0 32767.0
2 -999.0 -999.0 32767.0
3 -999.0 -999.0 32767.0
4 -999.0 -999.0 32767.0
-
Data Frame를 통해 L1 전처리
-
최근 데이터 분석에서 사용되는 R의 "dplyr" 라이브러리와 유사한 "dplython"를 사용
-
각 변수에 대해 최대값 및 최소값 설정
-
data_L1 = ( DplyFrame(data) >>
mutate( val = X.dn*0.0048875855 ) >>
sift( (0 <= X.val) & (X.val <= 5) ) >>
sift( (-90 <= X.lat) & (X.lat <= 90) ) >>
sift( (-180 <= X.lon) & (X.lon <= 360) )
)
data_L1.head()
lat lon dn val
223863 52.504745 161.210129 43.0 0.210166
225794 52.399376 160.873169 37.0 0.180841
225795 52.406925 160.959259 33.0 0.161290
225796 52.414509 161.045517 46.0 0.224829
229641 52.085556 158.963013 50.0 0.244379
-
L1를 이용하여 위/경도에 대한 최대값 및 최소값 출력
print(min(data_L1.lat), max(data_L1.lat))
print(min(data_L1.lon), max(data_L1.lon))
- 가시화를 위한 설정
- 초기 설정
- 크기 : figure
- 스타일 : style
- 폰트 : rc, rcParams
- 지도 해상도 : Basemap
- 변수 설정
- 위도 (lon), 경도 (lat), 에어로졸 광학두께 (val)
- 그림 설정
- 산점도 : scatter
- 컬러바 : colorbar
- 해안선 : drawcostlines, drawcountries, drawmapboundary
- 수평/수직 그리드 : drawparallels, drawmeridians
- 그림 제목 : title
%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.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='cyl', lon_0=128.2, lat_0=0,
llcrnrlon=95, llcrnrlat=-15,
urcrnrlon=200, urcrnrlat=60,
resolution='c')
X, Y = m(data_L1.lon.values, data_L1.lat.values)
VAL = data_L1.val.values
m.scatter(X, Y, c=VAL, s=1.0, marker="s", zorder=1, vmin=0, vmax=5, cmap=plt.cm.get_cmap('jet'), alpha=1.0)
# m.colorbar(location='right', label='Aerosol Optical Depth')
m.colorbar(location='bottom', label='Aerosol Optical Depth', pad=0.5)
# Black background
# m.drawcoastlines(color='yellow')
# m.drawcountries(color='yellow')
# m.drawmapboundary(fill_color='black')
# m.drawparallels(np.arange(-150, 120, 15), labels=[1,0,0,0], dashes=[2,2], color='yellow')
# m.drawmeridians(np.arange(-180, 180, 20), labels=[0,0,0,1], dashes=[2,2], color='yellow')
# White background
m.drawcoastlines(color='black')
m.drawcountries(color='black')
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-150, 120, 15), labels=[1,0,0,0], dashes=[2,2], color='black')
m.drawmeridians(np.arange(-180, 180, 20), labels=[0,0,0,1], dashes=[2,2], color='black')
plt.title('COMS / MI 2014-02-01 0000 UTC \n')
# plt.title('ECMWF / ERA : %04d-%02d \n' %( data_L1.year[0].astype('int'), data_L1.month[0].astype('int') ) )
plt.show()
- 천리안위성 1A호 (COMS/MI) 기상위성 자료를 이용한 에어로졸 광학두께
[전체]
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
'프로그래밍 언어 > Python' 카테고리의 다른 글
[Python] 파이썬 원도우 (Window 10)에서 수치예측모델 (Grib, Grb2) 자료 처리를 위한 "wgrib, wgrib2, cdo" 설치 방법 (0) | 2020.02.09 |
---|---|
[Python] 파이썬 NetCDF 형식인 Aqua/CERES 기상위성 자료를 이용한 가시화 (1) | 2019.10.23 |
[Python] 파이썬 Grib 및 Grb2 형식인 수치예측모델 (ECMWF) 자료를 이용한 가시화 (0) | 2019.10.23 |
[Python] 파이썬 바이너리 형식인 히마와리 8호 (Himawari-8/AHI) 기상 위성 자료를 이용한 가시화 (0) | 2019.10.22 |
[Python] 파이썬 라디오 미터 및 라디오 존데 관측 자료를 이용한 고도별 온/습도 등고선 가시화 (0) | 2019.09.07 |
최근댓글