python-awips/examples/notebooks/Grid_Levels_and_Parameters.ipynb

823 lines
289 KiB
Text
Raw Normal View History

2016-04-20 19:05:36 -05:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This examples 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.changeEDEXHost()\n",
"\n",
"After DataAccessLayer is imported from the package `awips.dataaccess`, the first step is to define the EDEX data server hostname (`edex-cloud.unidata.ucar.edu` for these examples)\n",
"\n"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")"
]
},
{
"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": 38,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"['acars',\n",
" 'airep',\n",
" 'binlightning',\n",
" 'bufrmosavn',\n",
" 'bufrmoseta',\n",
" 'bufrmosgfs',\n",
" 'bufrmoshpc',\n",
" 'bufrmoslamp',\n",
" 'bufrmosmrf',\n",
" 'bufrmosngm',\n",
" 'bufrua',\n",
" 'climate',\n",
" 'common_obs_spatial',\n",
" 'ffmp',\n",
" 'gfe',\n",
" 'grid',\n",
" 'hydro',\n",
" 'ldadmesonet',\n",
" 'maps',\n",
" 'modelsounding',\n",
" 'obs',\n",
" 'pirep',\n",
" 'practicewarning',\n",
" 'profiler',\n",
" 'radar',\n",
" 'radar_spatial',\n",
" 'satellite',\n",
" 'sfcobs',\n",
" 'warning']"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataTypes = DataAccessLayer.getSupportedDatatypes()\n",
"list(dataTypes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### DataAccessLayer.newDataRequest()\n",
"\n",
"Now create a new data request, and set the data type to **grid** and \"locationName\" to **RAP40** with **setDataType()** and **setLocationNames()**"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"grid\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### DataAccessLayer.getAvailableLocationNames()\n",
"\n",
"With datatype set to \"grid\", we can query all available grid names with **getAvailableLocationNames()**"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['CMC',\n",
" 'DGEX',\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",
" 'FNMOC-FAROP',\n",
" 'GFS',\n",
" 'GFS20',\n",
" 'GFSGuide',\n",
" 'GFSLAMP5',\n",
" 'GLERL',\n",
" 'GribModel:58:0:135',\n",
" 'GribModel:58:0:18',\n",
" 'GribModel:58:0:78',\n",
" 'GribModel:9:151:172',\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",
" 'HPCqpf',\n",
" 'HPCqpfNDFD',\n",
" 'HRRR',\n",
" 'LAMP2p5',\n",
" 'MOSGuide',\n",
" 'MOSGuideExtended',\n",
" 'MPE-Local-ALR',\n",
" 'MPE-Local-MSR',\n",
" 'MPE-Local-ORN',\n",
" 'MPE-Local-RHA',\n",
" 'MPE-Local-RSA',\n",
" 'MPE-Local-SJU',\n",
" 'MPE-Local-STR',\n",
" 'MPE-Local-TAR',\n",
" 'MPE-Local-TIR',\n",
" 'MPE-Mosaic-ALR',\n",
" 'MPE-Mosaic-FWR',\n",
" 'MPE-Mosaic-MSR',\n",
" 'MPE-Mosaic-ORN',\n",
" 'MPE-Mosaic-RHA',\n",
" 'MPE-Mosaic-SJU',\n",
" 'MPE-Mosaic-TAR',\n",
" 'MPE-Mosaic-TIR',\n",
" 'NAM12',\n",
" 'NAM40',\n",
" 'NAVGEM',\n",
" 'NCWF',\n",
" 'NOHRSC-SNOW',\n",
" 'NamDNG',\n",
" 'QPE-ALR',\n",
" 'QPE-Auto-TUA',\n",
" 'QPE-FWR',\n",
" 'QPE-KRF',\n",
" 'QPE-MSR',\n",
" 'QPE-ORN',\n",
" 'QPE-RFC-PTR',\n",
" 'QPE-RFC-RSA',\n",
" 'QPE-RFC-STR',\n",
" 'QPE-TIR',\n",
" 'QPE-TUA',\n",
" 'QPE-XNAV-ALR',\n",
" 'QPE-XNAV-FWR',\n",
" 'QPE-XNAV-KRF',\n",
" 'QPE-XNAV-MSR',\n",
" 'QPE-XNAV-ORN',\n",
" 'QPE-XNAV-RHA',\n",
" 'QPE-XNAV-SJU',\n",
" 'QPE-XNAV-TAR',\n",
" 'QPE-XNAV-TIR',\n",
" 'QPE-XNAV-TUA',\n",
" 'RAP13',\n",
" 'RAP20',\n",
" 'RAP40',\n",
" 'RFCqpf',\n",
" 'RTMA',\n",
" 'UKMET-Global',\n",
" 'UKMET-MODEL1',\n",
" 'UKMET37',\n",
" 'UKMET38',\n",
" 'UKMET39',\n",
" 'UKMET40',\n",
" 'UKMET41',\n",
" 'UKMET42',\n",
" 'UKMET43',\n",
" 'UKMET44',\n",
" 'URMA25',\n",
" 'WaveWatch',\n",
" 'fnmocWave']"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"available_grids = DataAccessLayer.getAvailableLocationNames(request)\n",
"available_grids.sort()\n",
"list(available_grids)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Set grid name with `setLocationNames()`"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"request.setLocationNames(\"RAP40\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# List Available Parameters for a Grid\n",
"\n",
"### 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": 42,
"metadata": {
"collapsed": false
},
2016-04-20 19:05:36 -05:00
"outputs": [
{
"data": {
"text/plain": [
"['AV',\n",
" 'BLI',\n",
" 'CAPE',\n",
" 'CFRZR',\n",
" 'CICEP',\n",
" 'CIn',\n",
" 'CP',\n",
" 'CP10hr',\n",
" 'CP11hr',\n",
" 'CP12hr',\n",
" 'CP13hr',\n",
" 'CP14hr',\n",
" 'CP15hr',\n",
" 'CP16hr',\n",
" 'CP17hr',\n",
" 'CP18hr',\n",
" 'CP1hr',\n",
" 'CP2hr',\n",
" 'CP3hr',\n",
" 'CP4hr',\n",
" 'CP5hr',\n",
" 'CP6hr',\n",
" 'CP9hr',\n",
" 'CRAIN',\n",
" 'CSNOW',\n",
" 'DpD',\n",
" 'DpT',\n",
" 'EPT',\n",
" 'GH',\n",
" 'HCDC',\n",
" 'HINDEX',\n",
" 'HPBL',\n",
" 'Heli',\n",
" 'LCDC',\n",
" 'LTNG',\n",
" 'LgSP',\n",
" 'LgSP10hr',\n",
" 'LgSP11hr',\n",
" 'LgSP12hr',\n",
" 'LgSP13hr',\n",
" 'LgSP14hr',\n",
" 'LgSP15hr',\n",
" 'LgSP16hr',\n",
" 'LgSP17hr',\n",
" 'LgSP18hr',\n",
" 'LgSP1hr',\n",
" 'LgSP2hr',\n",
" 'LgSP3hr',\n",
" 'LgSP4hr',\n",
" 'LgSP5hr',\n",
" 'LgSP6hr',\n",
" 'LgSP9hr',\n",
" 'MCDC',\n",
" 'MMSP',\n",
" 'MSTAV',\n",
" 'P',\n",
" 'PLPL',\n",
" 'PR',\n",
" 'PVV',\n",
" 'PW',\n",
" 'PoT',\n",
" 'REFD',\n",
" 'RH',\n",
" 'SH',\n",
" 'SLI',\n",
" 'SnD',\n",
" 'T',\n",
" 'TOTSN',\n",
" 'TOTSN10hr',\n",
" 'TOTSN11hr',\n",
" 'TOTSN12hr',\n",
" 'TOTSN13hr',\n",
" 'TOTSN14hr',\n",
" 'TOTSN15hr',\n",
" 'TOTSN16hr',\n",
" 'TOTSN17hr',\n",
" 'TOTSN18hr',\n",
" 'TOTSN1hr',\n",
" 'TOTSN2hr',\n",
" 'TOTSN3hr',\n",
" 'TOTSN4hr',\n",
" 'TOTSN5hr',\n",
" 'TOTSN6hr',\n",
" 'TOTSN9hr',\n",
" 'TP',\n",
" 'TP10hr',\n",
" 'TP11hr',\n",
" 'TP12hr',\n",
" 'TP13hr',\n",
" 'TP14hr',\n",
" 'TP15hr',\n",
" 'TP16hr',\n",
" 'TP17hr',\n",
" 'TP18hr',\n",
" 'TP1hr',\n",
" 'TP2hr',\n",
" 'TP3hr',\n",
" 'TP4hr',\n",
" 'TP5hr',\n",
" 'TP6hr',\n",
" 'TP9hr',\n",
" 'USTM',\n",
" 'VSTM',\n",
" 'VUCSH',\n",
" 'VVCSH',\n",
" 'Vis',\n",
" 'WEASD',\n",
" 'WEASD10hr',\n",
" 'WEASD11hr',\n",
" 'WEASD12hr',\n",
" 'WEASD13hr',\n",
" 'WEASD14hr',\n",
" 'WEASD15hr',\n",
" 'WEASD16hr',\n",
" 'WEASD17hr',\n",
" 'WEASD18hr',\n",
" 'WEASD1hr',\n",
" 'WEASD2hr',\n",
" 'WEASD3hr',\n",
" 'WEASD4hr',\n",
" 'WEASD5hr',\n",
" 'WEASD6hr',\n",
" 'WEASD9hr',\n",
" 'WGS',\n",
" 'uW',\n",
" 'vW']"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
2016-04-20 19:05:36 -05:00
}
],
"source": [
"availableParms = DataAccessLayer.getAvailableParameters(request)\n",
"availableParms.sort()\n",
"list(availableParms)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### setParameters()\n",
2016-04-20 19:05:36 -05:00
"\n",
"\n",
"set the request parameter"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"request.setParameters(\"T\")"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## List Available Levels for Parameter\n",
"\n",
"Using **DataAccessLayer.getAvailableLevels()**"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
"execution_count": 44,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false,
"scrolled": true
2016-04-20 19:05:36 -05:00
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"875.0MB\n",
"575.0MB\n",
"650.0MB\n",
2016-04-20 19:05:36 -05:00
"675.0MB\n",
"0.0TROP\n",
"700.0MB\n",
"250.0MB\n",
"350.0MB\n",
"150.0MB\n",
2016-04-20 19:05:36 -05:00
"550.0MB\n",
"375.0MB\n",
"0.0SFC\n",
"150.0_180.0BL\n",
"120.0_150.0BL\n",
"1000.0MB\n",
"725.0MB\n",
"125.0MB\n",
"850.0MB\n",
"0.0_30.0BL\n",
"325.0MB\n",
"225.0MB\n",
"400.0MB\n",
"450.0MB\n",
"600.0MB\n",
"2.0FHAG\n",
"975.0MB\n",
"950.0MB\n",
"30.0_60.0BL\n",
"475.0MB\n",
"825.0MB\n",
"425.0MB\n",
"525.0MB\n",
2016-04-20 19:05:36 -05:00
"200.0MB\n",
"775.0MB\n",
"60.0_90.0BL\n",
"300.0MB\n",
"175.0MB\n",
"275.0MB\n",
"100.0MB\n",
"90.0_120.0BL\n",
"800.0MB\n",
"80.0FHAG\n",
"500.0MB\n",
"625.0MB\n",
"925.0MB\n",
"750.0MB\n",
"900.0MB\n"
2016-04-20 19:05:36 -05:00
]
}
],
"source": [
"availableLevels = DataAccessLayer.getAvailableLevels(request)\n",
"for level in availableLevels:\n",
" print(level)"
]
},
{
"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",
2016-04-20 19:05:36 -05:00
"\n",
"For this example we will use Surface Temperature"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"request.setLevels(\"0.0SFC\")"
2016-04-20 19:05:36 -05:00
]
},
{
"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",
"* **getForecastCycle(cycle, times)** will return a DataTime array for a single forecast cycle."
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
"execution_count": 46,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<DataTime instance: 2016-10-20 20:00:00 (0) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (1) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (2) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (3) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (6) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (9) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (10) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (11) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (12) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (13) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (14) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (15) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (16) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (17) >,\n",
" <DataTime instance: 2016-10-20 20:00:00 (18) >]"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"fcstRun = DataAccessLayer.getForecastCycle(cycles[-1], times)\n",
"list(fcstRun)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Request a Grid\n",
"\n",
"### 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": 47,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"response = DataAccessLayer.getGridData(request, fcstRun)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"('Time :', '2016-10-20 20:00:00 (6)')\n",
"('Time :', '2016-10-20 20:00:00 (10)')\n",
"('Time :', '2016-10-20 20:00:00 (11)')\n",
"('Time :', '2016-10-20 20:00:00 (9)')\n",
"('Time :', '2016-10-20 20:00:00 (13)')\n",
"('Time :', '2016-10-20 20:00:00 (14)')\n",
"('Time :', '2016-10-20 20:00:00 (12)')\n",
"('Time :', '2016-10-20 20:00:00 (16)')\n",
"('Time :', '2016-10-20 20:00:00 (17)')\n",
"('Time :', '2016-10-20 20:00:00 (15)')\n",
"('Time :', '2016-10-20 20:00:00 (18)')\n",
"('Time :', '2016-10-20 20:00:00 (1)')\n",
"('Time :', '2016-10-20 20:00:00 (2)')\n",
"('Time :', '2016-10-20 20:00:00 (3)')\n",
"('Time :', '2016-10-20 20:00:00 (0)')\n",
"('Model:', 'RAP40')\n",
"('Parm :', 'T')\n",
"('Unit :', 'K')\n",
"(151, 113)\n"
]
}
],
"source": [
"for grid in response:\n",
" data = grid.getRawData()\n",
" lons, lats = grid.getLatLonCoords()\n",
" print('Time :', str(grid.getDataTime()))\n",
2016-04-20 19:05:36 -05:00
"\n",
"print('Model:', str(grid.getLocationName()))\n",
"print('Parm :', str(grid.getParameter()))\n",
"print('Unit :', str(grid.getUnit()))\n",
"print(data.shape)"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plot a Grid with Matplotlib and Cartopy\n",
"\n"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
"execution_count": 49,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nTGv5Xvr3P9HQsXpkcm8
2016-04-20 19:05:36 -05:00
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbb21a457d0>"
2016-04-20 19:05:36 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.tri as mtri\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"import cartopy.crs as ccrs\n",
2016-04-20 19:05:36 -05:00
"import numpy as np\n",
"ngrid = data.shape[1]\n",
"rlons = np.repeat(np.linspace(np.min(lons), np.max(lons), ngrid),\n",
" ngrid).reshape(ngrid, ngrid)\n",
"rlats = np.repeat(np.linspace(np.min(lats), np.max(lats), ngrid),\n",
" ngrid).reshape(ngrid, ngrid).T\n",
"tli = mtri.LinearTriInterpolator(mtri.Triangulation(lons.flatten(),\n",
" lats.flatten()), data.flatten())\n",
"rdata = tli(rlons, rlats)\n",
2016-04-20 19:05:36 -05:00
"\n",
"# Create Map\n",
"cmap = plt.get_cmap('rainbow')\n",
"matplotlib.rcParams.update({'font.size': 8})\n",
"plt.figure(figsize=(9, 6), dpi=100)\n",
"ax = plt.axes(projection=ccrs.PlateCarree())\n",
"\n",
"cs = plt.contourf(rlons, rlats, rdata, 60, cmap=cmap,\n",
" transform=ccrs.PlateCarree(),\n",
" vmin=rdata.min(), vmax=rdata.max())\n",
"\n",
"ax.gridlines()\n",
"ax.coastlines()\n",
"ax.set_aspect('auto', adjustable=None)\n",
"\n",
"cbar = plt.colorbar(orientation='horizontal')\n",
"cbar.set_label(str(grid.getLocationName()) +\" \"+ str(grid.getLevel()) + \" \" + str(grid.getParameter()) + \" \" \\\n",
" \"(\" + str(grid.getUnit()) + \") \" + \" valid \" + str(grid.getDataTime().getRefTime()) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Downsampling Large Grids"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nh9aHRADN2VjOxvUPUrz
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbb1cf02d10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import scipy.ndimage\n",
2016-04-20 19:05:36 -05:00
"\n",
"SCALING = 0.3\n",
"data = scipy.ndimage.zoom(data, SCALING, order=0)\n",
"lons = scipy.ndimage.zoom(lons, SCALING, order=0)\n",
"lats = scipy.ndimage.zoom(lats, SCALING, order=0)\n",
" \n",
2016-04-20 19:05:36 -05:00
"rlons = np.repeat(np.linspace(np.min(lons), np.max(lons), ngrid),\n",
" ngrid).reshape(ngrid, ngrid)\n",
2016-04-20 19:05:36 -05:00
"rlats = np.repeat(np.linspace(np.min(lats), np.max(lats), ngrid),\n",
" ngrid).reshape(ngrid, ngrid).T\n",
2016-04-20 19:05:36 -05:00
"tli = mtri.LinearTriInterpolator(mtri.Triangulation(lons.flatten(),\n",
" lats.flatten()), data.flatten())\n",
2016-04-20 19:05:36 -05:00
"rdata = tli(rlons, rlats)\n",
"\n",
"# Create Map\n",
"cmap = plt.get_cmap('rainbow')\n",
"matplotlib.rcParams.update({'font.size': 8})\n",
"plt.figure(figsize=(9, 6), dpi=100)\n",
"ax = plt.axes(projection=ccrs.PlateCarree())\n",
2016-04-20 19:05:36 -05:00
"\n",
"cs = plt.contourf(rlons, rlats, rdata, 60, cmap=cmap,\n",
" transform=ccrs.PlateCarree(),\n",
" vmin=rdata.min(), vmax=rdata.max())\n",
"\n",
"ax.gridlines()\n",
"ax.coastlines()\n",
"ax.set_aspect('auto', adjustable=None)\n",
"\n",
"cbar = plt.colorbar(orientation='horizontal')\n",
"cbar.set_label(str(grid.getLocationName()) +\" \"+ str(grid.getLevel()) + \" \" + str(grid.getParameter()) + \" \" \\\n",
" \"(\" + str(grid.getUnit()) + \") \" + \" valid \" + str(grid.getDataTime().getRefTime()) )"
2016-04-20 19:05:36 -05:00
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
2016-04-20 19:05:36 -05:00
}
},
"nbformat": 4,
"nbformat_minor": 0
}