python-awips/examples/notebooks/Grid_Levels_and_Parameters.ipynb

993 lines
498 KiB
Text
Raw Normal View History

2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This example covers the callable methods of the Python AWIPS DAF when working with gridded data. We start with a connection to an EDEX server, then query data types, then grid names, parameters, levels, and other information. Finally the gridded data is plotted for its domain using Matplotlib and Cartopy."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataAccessLayer.getSupportedDatatypes()\n",
"\n",
"getSupportedDatatypes() returns a list of available data types offered by the EDEX server defined above. "
]
},
{
"cell_type": "code",
"execution_count": 1,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['acars',\n",
" 'airep',\n",
" 'binlightning',\n",
" 'bufrmosAVN',\n",
" 'bufrmosETA',\n",
" 'bufrmosGFS',\n",
" 'bufrmosHPC',\n",
" 'bufrmosLAMP',\n",
" 'bufrmosMRF',\n",
" 'bufrua',\n",
" 'climate',\n",
" 'common_obs_spatial',\n",
" 'gfe',\n",
" 'gfeEditArea',\n",
" 'grid',\n",
" 'maps',\n",
" 'modelsounding',\n",
" 'obs',\n",
" 'pirep',\n",
" 'practicewarning',\n",
" 'profiler',\n",
" 'radar',\n",
" 'radar_spatial',\n",
" 'satellite',\n",
" 'sfcobs',\n",
" 'topo',\n",
" 'warning']"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 1,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import unittest\n",
"\n",
2018-09-06 13:05:37 -06:00
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
2018-09-05 15:52:38 -06:00
"dataTypes = DataAccessLayer.getSupportedDatatypes()\n",
"dataTypes.sort()\n",
2018-09-05 15:52:38 -06:00
"list(dataTypes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataAccessLayer.getAvailableLocationNames()\n",
"\n",
"Now create a new data request, and set the data type to **grid** to request all available grids with **getAvailableLocationNames()**"
]
},
{
"cell_type": "code",
"execution_count": 2,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['AUTOSPE',\n",
" 'CMC',\n",
" 'ESTOFS',\n",
" 'ETSS',\n",
" 'FFG-ALR',\n",
" 'FFG-FWR',\n",
" 'FFG-KRF',\n",
" 'FFG-MSR',\n",
" 'FFG-ORN',\n",
" 'FFG-PTR',\n",
" 'FFG-RHA',\n",
" 'FFG-RSA',\n",
" 'FFG-STR',\n",
" 'FFG-TAR',\n",
" 'FFG-TIR',\n",
" 'FFG-TUA',\n",
" 'GEFS',\n",
" 'GFS',\n",
" 'GFS20',\n",
" 'HFR-EAST_6KM',\n",
" 'HFR-EAST_PR_6KM',\n",
" 'HFR-US_EAST_DELAWARE_1KM',\n",
" 'HFR-US_EAST_FLORIDA_2KM',\n",
" 'HFR-US_EAST_NORTH_2KM',\n",
" 'HFR-US_EAST_SOUTH_2KM',\n",
" 'HFR-US_EAST_VIRGINIA_1KM',\n",
" 'HFR-US_HAWAII_1KM',\n",
" 'HFR-US_HAWAII_2KM',\n",
" 'HFR-US_HAWAII_6KM',\n",
" 'HFR-US_WEST_500M',\n",
" 'HFR-US_WEST_CENCAL_2KM',\n",
" 'HFR-US_WEST_LOSANGELES_1KM',\n",
" 'HFR-US_WEST_LOSOSOS_1KM',\n",
" 'HFR-US_WEST_NORTH_2KM',\n",
" 'HFR-US_WEST_SANFRAN_1KM',\n",
" 'HFR-US_WEST_SOCAL_2KM',\n",
" 'HFR-US_WEST_WASHINGTON_1KM',\n",
" 'HFR-WEST_6KM',\n",
" 'HPCGuide',\n",
" 'HPCqpfNDFD',\n",
" 'HRRR',\n",
" 'LAMP2p5',\n",
" 'MRMS_0500',\n",
" 'MRMS_1000',\n",
" 'NAM12',\n",
" 'NAM40',\n",
" 'NOHRSC-SNOW',\n",
" 'NationalBlend',\n",
" 'RAP13',\n",
" 'RTMA',\n",
" 'RTOFS-Now-WestAtl',\n",
" 'RTOFS-Now-WestConus',\n",
" 'RTOFS-WestAtl',\n",
" 'RTOFS-WestConus',\n",
" 'SPCGuide',\n",
" 'SeaIce',\n",
" 'TPCWindProb',\n",
" 'URMA25',\n",
" 'WaveWatch']"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 2,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"grid\")\n",
"available_grids = DataAccessLayer.getAvailableLocationNames(request)\n",
"available_grids.sort()\n",
"list(available_grids)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataAccessLayer.getAvailableParameters()\n",
"\n",
"After datatype and model name (locationName) are set, you can query all available parameters with **getAvailableParameters()**"
]
},
{
"cell_type": "code",
"execution_count": 3,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['36SHRMi',\n",
" '50dbzZ',\n",
" 'AV',\n",
" 'Along',\n",
" 'AppT',\n",
" 'BLI',\n",
" 'BRN',\n",
" 'BRNEHIi',\n",
" 'BRNSHR',\n",
" 'BRNmag',\n",
" 'BRNvec',\n",
" 'BdEPT06',\n",
" 'BlkMag',\n",
" 'BlkShr',\n",
" 'CAPE',\n",
" 'CFRZR',\n",
" 'CICEP',\n",
" 'CIn',\n",
" 'CP',\n",
" 'CP1hr',\n",
" 'CPr',\n",
" 'CPrD',\n",
" 'CRAIN',\n",
" 'CSNOW',\n",
" 'CURU',\n",
" 'CXR',\n",
" 'CapeStk',\n",
" 'Corf',\n",
" 'CorfF',\n",
" 'CorfFM',\n",
" 'CorfM',\n",
" 'CritT1',\n",
" 'CumNrm',\n",
" 'CumShr',\n",
" 'DivF',\n",
" 'DivFn',\n",
" 'DivFs',\n",
" 'DpD',\n",
" 'DpT',\n",
" 'EHI',\n",
" 'EHI01',\n",
" 'EHIi',\n",
" 'EPT',\n",
" 'EPTA',\n",
" 'EPTC',\n",
" 'EPTGrd',\n",
" 'EPTGrdM',\n",
" 'EPTs',\n",
" 'EPVg',\n",
" 'EPVs',\n",
" 'EPVt1',\n",
" 'EPVt2',\n",
" 'ESP',\n",
" 'ESP2',\n",
" 'FVecs',\n",
" 'FeatMot',\n",
" 'FnVecs',\n",
" 'FsVecs',\n",
" 'Fzra1',\n",
" 'Fzra2',\n",
" 'GH',\n",
" 'GHxSM',\n",
" 'GHxSM2',\n",
" 'Gust',\n",
" 'HI',\n",
" 'HI1',\n",
" 'HI3',\n",
" 'HI4',\n",
" 'HIdx',\n",
" 'HPBL',\n",
" 'Heli',\n",
" 'HeliC',\n",
" 'INV',\n",
" 'IPLayer',\n",
" 'Into',\n",
" 'KI',\n",
" 'L-I',\n",
" 'LIsfc2x',\n",
" 'LM5',\n",
" 'LM6',\n",
" 'MAdv',\n",
" 'MCon',\n",
" 'MCon2',\n",
" 'MLLCL',\n",
" 'MMP',\n",
" 'MMSP',\n",
" 'MSFDi',\n",
" 'MSFi',\n",
" 'MSFmi',\n",
" 'MSG',\n",
" 'MTV',\n",
" 'Mix1',\n",
" 'Mix2',\n",
" 'Mmag',\n",
" 'MpV',\n",
" 'NBE',\n",
" 'NST',\n",
" 'NST1',\n",
" 'NST2',\n",
" 'OmDiff',\n",
" 'P',\n",
" 'PAdv',\n",
" 'PBE',\n",
" 'PEC',\n",
" 'PFrnt',\n",
" 'PGrd',\n",
" 'PGrd1',\n",
" 'PGrdM',\n",
" 'PIVA',\n",
" 'PR',\n",
" 'PTvA',\n",
" 'PTyp',\n",
" 'PVV',\n",
" 'PW',\n",
" 'PW2',\n",
" 'PoT',\n",
" 'PoTA',\n",
" 'QPV1',\n",
" 'QPV2',\n",
" 'QPV3',\n",
" 'QPV4',\n",
" 'REFC',\n",
" 'RH',\n",
" 'RH_001_bin',\n",
" 'RH_002_bin',\n",
" 'RM5',\n",
" 'RM6',\n",
" 'RMprop',\n",
" 'RMprop2',\n",
" 'RRtype',\n",
" 'RV',\n",
" 'Rain1',\n",
" 'Rain2',\n",
" 'Rain3',\n",
" 'Ro',\n",
" 'SH',\n",
" 'SHx',\n",
" 'SLI',\n",
" 'SNSQ',\n",
" 'SNW',\n",
" 'SNWA',\n",
" 'SRMl',\n",
" 'SRMlM',\n",
" 'SRMm',\n",
" 'SRMmM',\n",
" 'SRMr',\n",
" 'SRMrM',\n",
" 'SSP',\n",
" 'SSi',\n",
" 'STP',\n",
" 'STP1',\n",
" 'Shear',\n",
" 'ShrMag',\n",
" 'SnD',\n",
" 'Snow1',\n",
" 'Snow2',\n",
" 'Snow3',\n",
" 'SnowT',\n",
" 'St-Pr',\n",
" 'StrTP',\n",
" 'StrmMot',\n",
" 'SuCP',\n",
" 'T',\n",
" 'TAdv',\n",
" 'TGrd',\n",
" 'TGrdM',\n",
" 'TORi',\n",
" 'TORi2',\n",
" 'TP',\n",
" 'TP1hr',\n",
" 'TQIND',\n",
" 'TShrMi',\n",
" 'TV',\n",
" 'TW',\n",
" 'T_001_bin',\n",
" 'Tdef',\n",
" 'Tdend',\n",
" 'ThGrd',\n",
" 'Thom5',\n",
" 'Thom5a',\n",
" 'Thom6',\n",
" 'TmDpD',\n",
" 'Tmax',\n",
" 'Tmin',\n",
" 'Topo',\n",
" 'TotQi',\n",
" 'Tstk',\n",
" 'TwMax',\n",
" 'TwMin',\n",
" 'Twstk',\n",
" 'TxSM',\n",
" 'USTM',\n",
" 'VAdv',\n",
" 'VAdvAdvection',\n",
" 'VGP',\n",
" 'VSTM',\n",
" 'Vis',\n",
" 'WCD',\n",
" 'WD',\n",
" 'WEASD',\n",
" 'WEASD1hr',\n",
" 'WGS',\n",
" 'Wind',\n",
" 'WndChl',\n",
" 'ageoVC',\n",
" 'ageoW',\n",
" 'ageoWM',\n",
" 'cCape',\n",
" 'cCin',\n",
" 'cTOT',\n",
" 'capeToLvl',\n",
" 'dCape',\n",
" 'dP',\n",
" 'dT',\n",
" 'dVAdv',\n",
" 'dZ',\n",
" 'defV',\n",
" 'del2gH',\n",
" 'df',\n",
" 'fGen',\n",
" 'fnD',\n",
" 'fsD',\n",
" 'gamma',\n",
" 'gammaE',\n",
" 'geoVort',\n",
" 'geoW',\n",
" 'geoWM',\n",
" 'loCape',\n",
" 'maxEPT',\n",
" 'minEPT',\n",
" 'mixRat',\n",
" 'msl-P',\n",
" 'muCape',\n",
" 'pV',\n",
" 'pVeq',\n",
" 'qDiv',\n",
" 'qVec',\n",
" 'qnVec',\n",
" 'qsVec',\n",
" 'shWlt',\n",
" 'snoRat',\n",
" 'snoRatCrocus',\n",
" 'snoRatEMCSREF',\n",
" 'snoRatOv2',\n",
" 'snoRatSPC',\n",
" 'snoRatSPCdeep',\n",
" 'snoRatSPCsurface',\n",
" 'staticCoriolis',\n",
" 'staticSpacing',\n",
" 'staticTopo',\n",
" 'swtIdx',\n",
" 'tTOT',\n",
" 'tWind',\n",
" 'tWindU',\n",
" 'tWindV',\n",
" 'uFX',\n",
" 'uW',\n",
" 'uWStk',\n",
" 'ulSnoRat',\n",
" 'vSmthW',\n",
" 'vTOT',\n",
" 'vW',\n",
" 'vWStk',\n",
" 'vertCirc',\n",
" 'wDiv',\n",
" 'wSp',\n",
" 'wSp_001_bin',\n",
" 'wSp_002_bin',\n",
" 'wSp_003_bin',\n",
" 'wSp_004_bin',\n",
" 'zAGL']"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 3,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"request.setLocationNames(\"RAP13\")\n",
"availableParms = DataAccessLayer.getAvailableParameters(request)\n",
"availableParms.sort()\n",
"list(availableParms)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataAccessLayer.getAvailableLevels()\n",
"\n",
"Selecting **\"T\"** for temperature."
]
},
{
"cell_type": "code",
"execution_count": 4,
2018-09-05 15:52:38 -06:00
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0SFC\n",
"350.0MB\n",
"475.0MB\n",
"610.0_40000.0FHAG\n",
"225.0MB\n",
"120.0_150.0BL\n",
"900.0MB\n",
"125.0MB\n",
"0.0_610.0FHAG\n",
"450.0MB\n",
"575.0MB\n",
"325.0MB\n",
"100.0MB\n",
"1000.0MB\n",
"60.0_90.0BL\n",
"275.0MB\n",
"1.0PV\n",
"950.0MB\n",
"150.0MB\n",
"1.5PV\n",
"700.0MB\n",
"825.0MB\n",
"150.0_180.0BL\n",
"250.0MB\n",
"375.0MB\n",
"1000.0_500.0MB\n",
"800.0MB\n",
"4000.0FHAG\n",
"925.0MB\n",
"2.0PV\n",
"0.5PV\n",
"0.0TROP\n",
"750.0MB\n",
"500.0MB\n",
"625.0MB\n",
"400.0MB\n",
"0.0FHAG\n",
"2.0FHAG\n",
"875.0MB\n",
"175.0MB\n",
"0.0_1000.0FHAG\n",
"850.0MB\n",
"600.0MB\n",
"725.0MB\n",
"0.0_6000.0FHAG\n",
"975.0MB\n",
"550.0MB\n",
"0.0_3000.0FHAG\n",
"675.0MB\n",
"425.0MB\n",
"200.0MB\n",
"0.0_30.0BL\n",
"30.0_60.0BL\n",
"650.0MB\n",
"525.0MB\n",
"300.0MB\n",
"90.0_120.0BL\n",
"1000.0FHAG\n",
"775.0MB\n",
"340.0_350.0K\n",
"290.0_300.0K\n",
"700.0_600.0MB\n",
"700.0_300.0MB\n",
"320.0Ke\n",
"800.0_750.0MB\n",
"60.0TILT\n",
"5.3TILT\n",
"1000.0_900.0MB\n",
"340.0K\n",
"5500.0_6000.0FHAG\n",
"255.0K\n",
"255.0_265.0K\n",
"3000.0_6000.0FHAG\n",
"25.0TILT\n",
"2000.0FHAG\n",
"0.0_500.0FHAG\n",
"1000.0_850.0MB\n",
"850.0_250.0MB\n",
"280.0_290.0Ke\n",
"1524.0FHAG\n",
"320.0_330.0K\n",
"0.0TILT\n",
"310.0_320.0Ke\n",
"310.0Ke\n",
"330.0K\n",
"900.0_800.0MB\n",
"550.0_500.0MB\n",
"2.4TILT\n",
"50.0TILT\n",
"3500.0FHAG\n",
"35.0TILT\n",
"12.0TILT\n",
"300.0_310.0K\n",
"3000.0_12000.0FHAG\n",
"0.9TILT\n",
"320.0K\n",
"400.0_350.0MB\n",
"500.0FHAG\n",
"750.0_700.0MB\n",
"1000.0_400.0MB\n",
"345.0K\n",
"250.0_260.0K\n",
"300.0Ke\n",
"290.0Ke\n",
"950.0_900.0MB\n",
"4572.0FHAG\n",
"275.0_285.0Ke\n",
"335.0Ke\n",
"295.0_305.0Ke\n",
"275.0_285.0K\n",
"600.0_550.0MB\n",
"310.0K\n",
"9000.0FHAG\n",
"335.0K\n",
"1000.0_7000.0FHAG\n",
"700.0_500.0MB\n",
"9144.0FHAG\n",
"325.0_335.0K\n",
"2000.0_8000.0FHAG\n",
"0.0_609.6FHAG\n",
"300.0K\n",
"0.0MAXOMEGA\n",
"315.0_325.0K\n",
"325.0K\n",
"340.0Ke\n",
"0.0_4000.0FHAG\n",
"5000.0_5500.0FHAG\n",
"300.0_250.0MB\n",
"1.5TILT\n",
"335.0_345.0K\n",
"315.0K\n",
"3.4TILT\n",
"2500.0FHAG\n",
"10000.0FHAG\n",
"0.0_2000.0FHAG\n",
"7000.0FHAG\n",
"5000.0FHAG\n",
"330.0Ke\n",
"500.0_400.0MB\n",
"1000.0_1500.0FHAG\n",
"305.0K\n",
"285.0_295.0Ke\n",
"14.0TILT\n",
"3000.0_3500.0FHAG\n",
"325.0_335.0Ke\n",
"2000.0_5000.0FHAG\n",
"7620.0FHAG\n",
"850.0_800.0MB\n",
"6096.0FHAG\n",
"6000.0_7000.0FHAG\n",
"2000.0_7000.0FHAG\n",
"9000.0_10000.0FHAG\n",
"295.0Ke\n",
"305.0Ke\n",
"265.0_275.0K\n",
"7000.0_8000.0FHAG\n",
"3000.0_8000.0FHAG\n",
"700.0_650.0MB\n",
"1000.0_6000.0FHAG\n",
"0.5TILT\n",
"450.0_400.0MB\n",
"1.8TILT\n",
"330.0_340.0K\n",
"800.0_700.0MB\n",
"850.0_300.0MB\n",
"6.0TILT\n",
"900.0_850.0MB\n",
"3657.6FHAG\n",
"0.0_5000.0FHAG\n",
"320.0_330.0Ke\n",
"8.7TILT\n",
"650.0_600.0MB\n",
"600.0_400.0MB\n",
"55.0TILT\n",
"270.0_280.0Ke\n",
"30.0TILT\n",
"310.0_320.0K\n",
"1500.0FHAG\n",
"1000.0_950.0MB\n",
"5500.0FHAG\n",
"250.0_200.0MB\n",
"500.0_1000.0FHAG\n",
"400.0_300.0MB\n",
"500.0_100.0MB\n",
"1000.0_3000.0FHAG\n",
"8000.0FHAG\n",
"285.0Ke\n",
"290.0K\n",
"305.0_315.0K\n",
"285.0_295.0K\n",
"0.0_2500.0FHAG\n",
"925.0_850.0MB\n",
"275.0Ke\n",
"1500.0_2000.0FHAG\n",
"300.0_200.0MB\n",
"260.0_270.0K\n",
"2743.2FHAG\n",
"3000.0FHAG\n",
"315.0_325.0Ke\n",
"600.0_500.0MB\n",
"16.7TILT\n",
"280.0K\n",
"500.0_250.0MB\n",
"40.0TILT\n",
"3048.0FHAG\n",
"400.0_200.0MB\n",
"300.0_310.0Ke\n",
"270.0_280.0K\n",
"1000.0_700.0MB\n",
"45.0TILT\n",
"850.0_500.0MB\n",
"2500.0_3000.0FHAG\n",
"609.6FHAG\n",
"0.0_8000.0FHAG\n",
"295.0K\n",
"4.3TILT\n",
"295.0_305.0K\n",
"330.0_340.0Ke\n",
"270.0K\n",
"4000.0_4500.0FHAG\n",
"280.0_290.0K\n",
"925.0_700.0MB\n",
"0.0_1500.0FHAG\n",
"260.0K\n",
"10.0TILT\n",
"3500.0_4000.0FHAG\n",
"325.0Ke\n",
"285.0K\n",
"290.0_300.0Ke\n",
"7.5TILT\n",
"1828.8FHAG\n",
"280.0Ke\n",
"500.0_450.0MB\n",
"305.0_315.0Ke\n",
"250.0K\n",
"4500.0FHAG\n",
"1250.0FHAG\n",
"0.0_10000.0FHAG\n",
"4500.0_5000.0FHAG\n",
"250.0_350.0K\n",
"270.0Ke\n",
"275.0K\n",
"315.0Ke\n",
"500.0_300.0MB\n",
"350.0_300.0MB\n",
"750.0FHAG\n",
"19.5TILT\n",
"2000.0_2500.0FHAG\n",
"850.0_700.0MB\n",
"350.0K\n",
"265.0K\n",
"6000.0FHAG\n",
"8000.0_9000.0FHAG\n",
"700.0_300.0LYRMB\n",
"850.0_700.0LYRMB\n"
2018-09-05 15:52:38 -06:00
]
}
],
"source": [
"request.setParameters(\"T\")\n",
"availableLevels = DataAccessLayer.getAvailableLevels(request)\n",
"for lvl in availableLevels:\n",
" print(lvl)"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* **0.0SFC** is the Surface level\n",
"* **FHAG** stands for Fixed Height Above Ground (in meters)\n",
"* **NTAT** stands for Nominal Top of the ATmosphere\n",
"* **BL** stands for Boundary Layer, where **0.0_30.0BL** reads as *0-30 mb above ground level* \n",
"* **TROP** is the Tropopause level\n",
"\n",
"**request.setLevels()**\n",
"\n",
"For this example we will use Surface Temperature"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [],
"source": [
"request.setLevels(\"2.0FHAG\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataAccessLayer.getAvailableTimes()\n",
"\n",
"* **getAvailableTimes(request, True)** will return an object of *run times* - formatted as `YYYY-MM-DD HH:MM:SS`\n",
"* **getAvailableTimes(request)** will return an object of all times - formatted as `YYYY-MM-DD HH:MM:SS (F:ff)`\n",
"* **getForecastRun(cycle, times)** will return a DataTime array for a single forecast cycle."
]
},
{
"cell_type": "code",
"execution_count": 6,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >,\n",
" <DataTime instance: 2020-09-04 18:00:00 >]"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 6,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)\n",
"list(fcstRun)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataAccessLayer.getGridData()\n",
"\n",
"Now that we have our `request` and DataTime `fcstRun` arrays ready, it's time to request the data array from EDEX."
]
},
{
"cell_type": "code",
"execution_count": 7,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Time : 2020-09-04 18:00:00\n",
"Model: RAP13\n",
"Parm : T\n",
"Unit : K\n",
2018-09-05 15:52:38 -06:00
"(337, 451)\n"
]
}
],
"source": [
"response = DataAccessLayer.getGridData(request, [fcstRun[-1]])\n",
"for grid in response:\n",
" data = grid.getRawData()\n",
" lons, lats = grid.getLatLonCoords()\n",
" print('Time :', str(grid.getDataTime()))\n",
"\n",
"print('Model:', str(grid.getLocationName()))\n",
"print('Parm :', str(grid.getParameter()))\n",
"print('Unit :', str(grid.getUnit()))\n",
"print(data.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting with Matplotlib and Cartopy\n",
"\n",
"**1. pcolormesh**"
]
},
{
"cell_type": "code",
2018-09-06 13:05:37 -06:00
"execution_count": 8,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1152x648 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"metadata": {
"needs_background": "light"
},
2018-09-05 15:52:38 -06:00
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"import cartopy.crs as ccrs\n",
"import cartopy.feature as cfeature\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"import numpy as np\n",
"import numpy.ma as ma\n",
"from scipy.io import loadmat\n",
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(16, 9),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.set_extent(bbox)\n",
" ax.coastlines(resolution='50m')\n",
" gl = ax.gridlines(draw_labels=True)\n",
" gl.top_labels = gl.right_labels = False\n",
2018-09-05 15:52:38 -06:00
" gl.xformatter = LONGITUDE_FORMATTER\n",
" gl.yformatter = LATITUDE_FORMATTER\n",
" return fig, ax\n",
"\n",
"#convert temp from K to F\n",
"dataf = data*1.8-459.67\n",
"\n",
2018-09-05 15:52:38 -06:00
"cmap = plt.get_cmap('rainbow')\n",
"bbox = [lons.min(), lons.max(), lats.min(), lats.max()]\n",
"fig, ax = make_map(bbox=bbox)\n",
"cs = ax.pcolormesh(lons, lats, dataf, cmap=cmap)\n",
2018-09-05 15:52:38 -06:00
"cbar = fig.colorbar(cs, extend='both', shrink=0.5, orientation='horizontal')\n",
"cbar.set_label(grid.getLocationName() +\" \" + grid.getLevel() + \" \" \\\n",
" + grid.getParameter() + \" (\" + grid.getUnit() + \") \" \\\n",
2018-09-05 15:52:38 -06:00
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**2. contourf**"
]
},
{
"cell_type": "code",
2018-09-06 13:05:37 -06:00
"execution_count": 9,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAm4AAAHhCAYAAADXpjKDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOydd5QUVdrGf9W5JwdmBhhyBpGcFEWCYkQlKBgQ11VxDaCLGFfXdc2uu6bVz4ioaxbFhIoYUAERRASUIEhOk2P3dKj7/dFdNdU1VR1mhqT9nDNnurtu3ftW1a1bT71REkKQRBJJJJFEEkkkkcThD8uhFiCJJJJIIokkkkgiifiQJG5JJJFEEkkkkUQSRwiSxC2JJJJIIokkkkjiCEGSuCWRRBJJJJFEEkkcIUgStySSSCKJJJJIIokjBEnilkQSSSSRRBJJJHGEwHaoBTDDKaecIoqLiw+1GEkcAfD5fDgcjkMtRhJHCJLz5cCjoqKCrVu30rVrV1JSUiK2rV27ls6dO+N2uxvdvxACn89HbW0tu3btIjU1ldzcXNLT05EkqaniRyDR+SKEYOvWrVRWVpKVlUVKSgqpqakNzkMs7Nmzh927dyNJEgMGDEhU7CMOfr+fnTt3UlFRQVpaGg6Hg5ycHNLS0uLuo66uDr/fj8vlYu/evQghcDqd7Nu3j+zsbCoqKsjNzaVly5YH7Diac31ZuXLlJ0KIUxpsEEIcln8DBw4USSQRD7744otDLUISRxCS8+XA4vXXXxf5+fliyZIlDbYtW7ZMtG/fXgSDwWYbr6qqStx5553imGOOETk5OeLKK68US5YsEbW1tc3Sf6LzZd68eWLgwIFNHv++++4TgJgwYYL627Jly8STTz4pbrzxRlFSUtKk/g9XjBo1SgDi3nvvFa1btxZZWVni+uuvF/n5+WLgwIHi+eefF7IsJ9Tntm3bxFVXXdWofRNFc64vwAphwI8OOUEz+0sStyTiRfJBnEQiSM6XA4PKykpxySWXiM6dO4uVK1catjnttNPEE088ccBk2LZtm7jzzjvF0UcfLZxOp2jZsqU46aSTxHPPPSf8fn+j+kx0vgwYMEC89dZbjRpLC1mWxbJly8T+/fvV3wYNGiQAMWzYMHHmmWeKFStWiF9++aXRx3Y4YseOHeK5554TQgjx2muvqce7YcMGsWjRItGvXz/Ro0cPMX78eLF169ZDLG1DHAzilvRxSyKJJJJIoklYunQp/fr1Q5IkfvzxR0PT3r59+1iyZAmXXHLJAZOjXbt23Hbbbfz000/U1tayfPlyrrjiCl588UVGjBhBUVHRARtbQYcOHZg/fz4+n6/RfWzdupV7772Xd999l6VLl1JcXIwQgsWLF3POOeewevVq8vPzueyyyzj++OOZPn0606ZNY8iQIbRo0YJ27dohSRIPPPBAMx7ZwUGbNm3UOTJ58mR27drF4sWL6datG6NHj2b58uX4/X7eeecdTjvtNDZu3HiIJT74OGx93JJIIokkkjj88eCDD/LQQw/x5JNPMn78eNN2dXV1uN3ug+ZfaLFYaNu2LW3btuXss8/m9ttv54QTTuCHH37A5XIdsHFfeuklpk6dSq9evZg1axZt27alV69edOrUyXQfn8/Hd999x4oVK/B4PLzxxht069aNo446ikceeYSLLrqI6upqIEROL730Uh599FEAfvvtNzp16kRBQQGvvPIKnTt35tlnn+Wuu+5iyJAhB+w4DxZat24d8d1qtZKdnU27du3IzMyke/fu+P1+bLY/Dp354xxpEkkkkUQSUSGEiNu5XwjBiy++yBNPPMEPP/zQ4AGrR5s2bcjIyOCjjz7i9NNPbw5x44bFYuGuu+5izZo1PPnkk1x33XUHbKyUlBTefvttFi9ezJNPPkl5eTmrVq0iOzubgoIC0tLS6N69O61atWLRokVs3ryZPXv20L17d4455hjS0tKYMGEC119/fURAg0JO9NenY8eOrFixgjZt2lBQUADAmWeeybp16zjnnHO44447uOKKK7BarQfsmA8mXnzxRVasWAHA9u3buffee/9QpA2SxC2JJJJI4rDFp59+yoQJE1i8ePEBiyz0+XxkZ2dTW1tL27Zt+f7778nPz0eWZf79738zYcIEOnfuDITI2po1a5g/fz6vvfYawWCQN954IyZpA/B6vYwYMYIXX3yxWYhbSUkJc+bM4auvvmLTpk14vV7mz59P3759DdvX1NTQtm1b3njjDc4880y2bt1Kq1at6NChA6+88gqFhYWcfPLJWCzN40E0YsQIjj/+eILBIJIk8dNPP1FWVkZVVRXr1q1j165dXHjhhfTv35/CwkIyMzOj9me32023DRw4MOL74MGDmTdvHmvXruWKK67g5Zdf5r777mPEiBHNHnV7sDF58mRSUlJ4/fXXWbhwIWPHjj3UIh18GDm+HQ5/yeCEJOJF0tk8iURwJM2XX375RQDq31FHHSXuu+8+8eWXXwqv19ssY7zwwgtq/yNHjhSZmZkiKytLZGZmqr/37dtXnHDCCaJ169aiY8eOYsaMGeLbb7+NGR26YcMG8cADD4gTTzxRpKWliZNOOsk0cCFRDB8+XJx33nnizTffFOvWrRNDhgwRrVq1Eueee66YNWuWePXVVyPkO+mkk9Tj6dChgxgxYoTo2rWrkCRJjBw5UvTr10907txZbNmyJWKcxsyXnTt3Rly3//znP0082sYjGAyKOXPmiK5du4q+ffuq0ajNGdl7qDB58mQBiIKCAgEIp9N5yAM1DkZwQlLjlkQSSSRxmCIvL4/09HSqqqoAWLduHTfddJO6XZIkrr32WkaOHEl+fj4//vgjFRUVzJ49O27NkWJCGzVqFI899hidOnWioqICIQQLFiyga9euuN1uKioq6NChA506dYqptRFCcMcdd/B///d/TJw4kauvvpq3336bjIyMRp6JyL5feeUVNm7cyOeff676zH3xxResWrWK7du3s2PHDm677TZcLhdnn302AO+88w6VlZXk5OTgdDrV/mRZxmKxhKL1LBY6derE5MmTueGGGxqt5czNzeXmm29m9+7dnHHGGYwbN67Jx91YWCwWLr74YqZNm8bVV1/NGWecgdvt5vPPP2fevHlR/RKbAuW8Hki89NJLPPDAA1itVnr37k15eTmnnXYaCxYs+N2Yhg1hxOYOh7+kxi2JeHEkaVCSOPQ40uZLZWWl+Oijj8TDDz8s9uzZI3bu3Cneeustcdlll0VodYz+hg8fLm655Rbx6aefiqqqKrXPL7/8Urzxxhti9erV4o477hA5OTni119/bTaZr7/+ejFkyBCxd+9e4fV6xYIFC8QzzzwjXnjhBfHII4+Im266SVx00UVi8uTJYtOmTXH16fP5xHvvvScGDhwo+vfvL5YvXx61/aOPPio6d+4sLrzwQnHjjTeKuXPnil9++SWqpunnn38WZ599tgDE448/LoRovvlSV1cnXn/9dfHwww+LDRs2NEufiSIQCIgnnnhCzZU2ZMgQ0a9fPzF48GBx8803i+Li4mYZZ+bMmQIQKSkpokuXLuKaa64R33//vRBCiLvuukukpqaKHTt2NHmc448/XgBizZo1Qoh6TeeMGTOa3HdjcTA0blJo2+GHQYMGCcUBMYkkouHLL79k5MiRh1qMJI4Q/N7mywUXXMArr7wCQJ8+fZgyZQo+n49///vfVFZW0qpVKyorK6mpqaF9+/bq4t+7d2+2bt3KwIEDufvuu2nXrl2zyTRgwACqqqpo1aoVa9as4aijjlKj/zIyMmjdujWtWrVi1apVlJSU8L///c+0r+LiYqZOncqiRYsYMGAAs2bNYuLEiTG1OYFAgIULF7J//3527NjB2rVrWb58OaWlpQwePJhhw4Zx8sknM2DAAJYuXco999zDunXruPDCC7nyyivVKNB454sQgr1791JcXIzD4SA9PZ1WrVohSRJCCPr06cPGjRs544wzWLZsGampqTzwwAOqRvBgoq6ujmXLlmGxWEhNTcXr9fLCCy/wzDPPcOqpp/LRRx81qf8PPviACy64gL/97W+ceOKJvP/++8y
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1152x648 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"metadata": {
"needs_background": "light"
},
2018-09-05 15:52:38 -06:00
"output_type": "display_data"
}
],
"source": [
"fig2, ax2 = make_map(bbox=bbox)\n",
"cs2 = ax2.contourf(lons, lats, dataf, 80, cmap=cmap,\n",
" vmin=dataf.min(), vmax=dataf.max(), extend='both')\n",
"cbar2 = fig2.colorbar(cs2, shrink=0.5, orientation='horizontal')\n",
"cbar2.set_label(grid.getLocationName() +\" \" + grid.getLevel() + \" \" \\\n",
" + grid.getParameter() + \" (\" + grid.getUnit() + \") \" \\\n",
2018-09-05 15:52:38 -06:00
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
2018-09-05 15:52:38 -06:00
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
2018-09-05 15:52:38 -06:00
"language": "python",
"name": "python3"
2018-09-05 15:52:38 -06:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
2018-09-05 15:52:38 -06:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
2018-09-05 15:52:38 -06:00
}
},
"nbformat": 4,
"nbformat_minor": 1
}