2016-04-20 19:05:36 -05:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
2016-05-24 15:29:46 -05:00
"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 Cartopy and Basemap."
]
},
{
"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",
2016-05-24 15:29:46 -05:00
"execution_count": 380,
"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": 381,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false,
"scrolled": true
},
2016-05-24 15:29:46 -05:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"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\n"
]
}
],
"source": [
"dataTypes = DataAccessLayer.getSupportedDatatypes()\n",
"for type in dataTypes: print type"
]
},
{
"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": 382,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"grid\")\n",
"request.setLocationNames(\"RAP40\")"
]
},
{
"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": 383,
"metadata": {
"collapsed": false
},
2016-04-20 19:05:36 -05:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"AV\n",
2016-05-24 15:29:46 -05:00
"BGRUN\n",
"BGRUN1hr\n",
2016-04-20 19:05:36 -05:00
"BLI\n",
"CAPE\n",
2016-05-24 15:29:46 -05:00
"CFRZR\n",
"CICEP\n",
2016-04-20 19:05:36 -05:00
"CIn\n",
2016-05-24 15:29:46 -05:00
"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",
2016-04-20 19:05:36 -05:00
"CP6hr\n",
2016-05-24 15:29:46 -05:00
"CP9hr\n",
"CRAIN\n",
"CSNOW\n",
"DpD\n",
"DpT\n",
"EPT\n",
2016-04-20 19:05:36 -05:00
"GH\n",
2016-05-24 15:29:46 -05:00
"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",
2016-04-20 19:05:36 -05:00
"P\n",
2016-05-24 15:29:46 -05:00
"PLPL\n",
"PR\n",
"PT\n",
2016-04-20 19:05:36 -05:00
"PVV\n",
"PW\n",
2016-05-24 15:29:46 -05:00
"PoT\n",
"REFC\n",
"REFD\n",
"RETOP\n",
2016-04-20 19:05:36 -05:00
"RH\n",
2016-05-24 15:29:46 -05:00
"SH\n",
2016-04-20 19:05:36 -05:00
"SLI\n",
2016-05-24 15:29:46 -05:00
"SSRUN\n",
"SSRUN1hr\n",
"SnD\n",
2016-04-20 19:05:36 -05:00
"T\n",
2016-05-24 15:29:46 -05:00
"TCC\n",
"USTM\n",
"VSTM\n",
"VUCSH\n",
"VVCSH\n",
"Vis\n",
2016-04-20 19:05:36 -05:00
"WEASD\n",
2016-05-24 15:29:46 -05:00
"WEASD1hr\n",
"WEASD2hr\n",
"WEASD3hr\n",
"WGS\n",
2016-04-20 19:05:36 -05:00
"uW\n",
"vW\n"
]
}
],
"source": [
2016-05-24 15:29:46 -05:00
"availableParms = DataAccessLayer.getAvailableParameters(request)\n",
"availableParms.sort()\n",
"for parm in availableParms: print parm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### setParameters()\n",
2016-04-20 19:05:36 -05:00
"\n",
"\n",
2016-05-24 15:29:46 -05:00
"set the request parameter"
]
},
{
"cell_type": "code",
"execution_count": 384,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"request.setParameters(\"T\")"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2016-05-24 15:29:46 -05:00
"### DataAccessLayer.getAvailableLevels()"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2016-05-24 15:29:46 -05:00
"execution_count": 385,
2016-04-20 19:05:36 -05:00
"metadata": {
2016-05-24 15:29:46 -05:00
"collapsed": false,
"scrolled": true
2016-04-20 19:05:36 -05:00
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2016-05-24 15:29:46 -05:00
"60.0_90.0BL\n",
"0.0TROP\n",
2016-04-20 19:05:36 -05:00
"1000.0MB\n",
2016-05-24 15:29:46 -05:00
"0.0SFC\n",
"975.0MB\n",
2016-04-20 19:05:36 -05:00
"950.0MB\n",
"925.0MB\n",
"900.0MB\n",
"875.0MB\n",
"850.0MB\n",
"825.0MB\n",
"775.0MB\n",
2016-05-24 15:29:46 -05:00
"650.0MB\n",
"2.0FHAG\n",
"80.0FHAG\n",
2016-04-20 19:05:36 -05:00
"600.0MB\n",
"30.0_60.0BL\n",
2016-05-24 15:29:46 -05:00
"90.0_120.0BL\n",
2016-04-20 19:05:36 -05:00
"120.0_150.0BL\n",
2016-05-24 15:29:46 -05:00
"150.0_180.0BL\n",
"800.0MB\n",
"750.0MB\n",
"725.0MB\n",
2016-04-20 19:05:36 -05:00
"700.0MB\n",
2016-05-24 15:29:46 -05:00
"0.0_30.0BL\n",
2016-04-20 19:05:36 -05:00
"675.0MB\n",
"625.0MB\n",
2016-05-24 15:29:46 -05:00
"575.0MB\n",
2016-04-20 19:05:36 -05:00
"550.0MB\n",
"525.0MB\n",
"500.0MB\n",
2016-05-24 15:29:46 -05:00
"475.0MB\n",
2016-04-20 19:05:36 -05:00
"450.0MB\n",
2016-05-24 15:29:46 -05:00
"425.0MB\n",
2016-04-20 19:05:36 -05:00
"400.0MB\n",
2016-05-24 15:29:46 -05:00
"375.0MB\n",
"350.0MB\n",
"325.0MB\n",
2016-04-20 19:05:36 -05:00
"300.0MB\n",
2016-05-24 15:29:46 -05:00
"275.0MB\n",
2016-04-20 19:05:36 -05:00
"250.0MB\n",
2016-05-24 15:29:46 -05:00
"225.0MB\n",
2016-04-20 19:05:36 -05:00
"200.0MB\n",
2016-05-24 15:29:46 -05:00
"175.0MB\n",
2016-04-20 19:05:36 -05:00
"150.0MB\n",
2016-05-24 15:29:46 -05:00
"125.0MB\n",
"100.0MB\n"
2016-04-20 19:05:36 -05:00
]
}
],
"source": [
2016-05-24 15:29:46 -05:00
"availableLevels = DataAccessLayer.getAvailableLevels(request)\n",
"availableLevels.sort()\n",
"for level in availableLevels: 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",
2016-05-24 15:29:46 -05:00
"For this example we will use Surface Temperature"
]
},
{
"cell_type": "code",
"execution_count": 386,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"request.setLevels(\"0.0SFC\")"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2016-05-24 15:29:46 -05:00
"### 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)`"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2016-05-24 15:29:46 -05:00
"execution_count": 387,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2016-05-24 15:29:46 -05:00
"2016-05-24 19:00:00\n"
]
}
],
"source": [
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"print cycles[-1] # 0 for FIRST time, -1 for LAST"
]
},
{
"cell_type": "code",
"execution_count": 388,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2016-05-24 12:00:00 (0)\n",
"2016-05-24 13:00:00 (0)\n",
"2016-05-24 12:00:00 (1)\n",
"2016-05-24 14:00:00 (0)\n",
"2016-05-24 13:00:00 (1)\n",
"2016-05-24 12:00:00 (2)\n",
"2016-05-24 15:00:00 (0)\n",
"2016-05-24 14:00:00 (1)\n",
"2016-05-24 13:00:00 (2)\n",
"2016-05-24 12:00:00 (3)\n",
"2016-05-24 16:00:00 (0)\n",
"2016-05-24 15:00:00 (1)\n",
"2016-05-24 14:00:00 (2)\n",
"2016-05-24 13:00:00 (3)\n",
"2016-05-24 12:00:00 (4)\n",
"2016-05-24 17:00:00 (0)\n",
"2016-05-24 16:00:00 (1)\n",
"2016-05-24 15:00:00 (2)\n",
"2016-05-24 14:00:00 (3)\n",
"2016-05-24 13:00:00 (4)\n",
"2016-05-24 12:00:00 (5)\n",
"2016-05-24 18:00:00 (0)\n",
"2016-05-24 17:00:00 (1)\n",
"2016-05-24 16:00:00 (2)\n",
"2016-05-24 15:00:00 (3)\n",
"2016-05-24 14:00:00 (4)\n",
"2016-05-24 13:00:00 (5)\n",
"2016-05-24 12:00:00 (6)\n",
"2016-05-24 19:00:00 (0)\n",
"2016-05-24 18:00:00 (1)\n",
"2016-05-24 17:00:00 (2)\n",
"2016-05-24 16:00:00 (3)\n",
"2016-05-24 15:00:00 (4)\n",
"2016-05-24 14:00:00 (5)\n",
"2016-05-24 13:00:00 (6)\n",
"2016-05-24 19:00:00 (1)\n",
"2016-05-24 18:00:00 (2)\n",
"2016-05-24 17:00:00 (3)\n",
"2016-05-24 16:00:00 (4)\n",
"2016-05-24 15:00:00 (5)\n",
"2016-05-24 14:00:00 (6)\n",
"2016-05-24 19:00:00 (2)\n",
"2016-05-24 18:00:00 (3)\n",
"2016-05-24 17:00:00 (4)\n",
"2016-05-24 16:00:00 (5)\n",
"2016-05-24 15:00:00 (6)\n",
"2016-05-24 12:00:00 (9)\n",
"2016-05-24 19:00:00 (3)\n",
"2016-05-24 18:00:00 (4)\n",
"2016-05-24 17:00:00 (5)\n",
"2016-05-24 16:00:00 (6)\n",
"2016-05-24 13:00:00 (9)\n",
"2016-05-24 12:00:00 (10)\n",
"2016-05-24 19:00:00 (4)\n",
"2016-05-24 18:00:00 (5)\n",
"2016-05-24 17:00:00 (6)\n",
"2016-05-24 14:00:00 (9)\n",
"2016-05-24 13:00:00 (10)\n",
"2016-05-24 12:00:00 (11)\n",
"2016-05-24 19:00:00 (5)\n",
"2016-05-24 18:00:00 (6)\n",
"2016-05-24 15:00:00 (9)\n",
"2016-05-24 14:00:00 (10)\n",
"2016-05-24 13:00:00 (11)\n",
"2016-05-24 12:00:00 (12)\n",
"2016-05-24 19:00:00 (6)\n",
"2016-05-24 16:00:00 (9)\n",
"2016-05-24 15:00:00 (10)\n",
"2016-05-24 14:00:00 (11)\n",
"2016-05-24 13:00:00 (12)\n",
"2016-05-24 12:00:00 (13)\n",
"2016-05-24 17:00:00 (9)\n",
"2016-05-24 16:00:00 (10)\n",
"2016-05-24 15:00:00 (11)\n",
"2016-05-24 14:00:00 (12)\n",
"2016-05-24 13:00:00 (13)\n",
"2016-05-24 12:00:00 (14)\n",
"2016-05-24 18:00:00 (9)\n",
"2016-05-24 17:00:00 (10)\n",
"2016-05-24 16:00:00 (11)\n",
"2016-05-24 15:00:00 (12)\n",
"2016-05-24 14:00:00 (13)\n",
"2016-05-24 13:00:00 (14)\n",
"2016-05-24 12:00:00 (15)\n",
"2016-05-24 19:00:00 (9)\n",
"2016-05-24 18:00:00 (10)\n",
"2016-05-24 17:00:00 (11)\n",
"2016-05-24 16:00:00 (12)\n",
"2016-05-24 15:00:00 (13)\n",
"2016-05-24 14:00:00 (14)\n",
"2016-05-24 13:00:00 (15)\n",
"2016-05-24 12:00:00 (16)\n",
"2016-05-24 19:00:00 (10)\n",
"2016-05-24 18:00:00 (11)\n",
"2016-05-24 17:00:00 (12)\n",
"2016-05-24 16:00:00 (13)\n",
"2016-05-24 15:00:00 (14)\n",
"2016-05-24 14:00:00 (15)\n",
"2016-05-24 13:00:00 (16)\n",
"2016-05-24 12:00:00 (17)\n",
"2016-05-24 19:00:00 (11)\n",
"2016-05-24 18:00:00 (12)\n",
"2016-05-24 17:00:00 (13)\n",
"2016-05-24 16:00:00 (14)\n",
"2016-05-24 15:00:00 (15)\n",
"2016-05-24 14:00:00 (16)\n",
"2016-05-24 13:00:00 (17)\n",
"2016-05-24 12:00:00 (18)\n",
"2016-05-24 19:00:00 (12)\n",
"2016-05-24 18:00:00 (13)\n",
"2016-05-24 17:00:00 (14)\n",
"2016-05-24 16:00:00 (15)\n",
"2016-05-24 15:00:00 (16)\n",
"2016-05-24 14:00:00 (17)\n",
"2016-05-24 13:00:00 (18)\n",
"2016-05-24 19:00:00 (13)\n",
"2016-05-24 18:00:00 (14)\n",
"2016-05-24 17:00:00 (15)\n",
"2016-05-24 16:00:00 (16)\n",
"2016-05-24 15:00:00 (17)\n",
"2016-05-24 14:00:00 (18)\n",
"2016-05-24 19:00:00 (14)\n",
"2016-05-24 18:00:00 (15)\n",
"2016-05-24 17:00:00 (16)\n",
"2016-05-24 16:00:00 (17)\n",
"2016-05-24 15:00:00 (18)\n",
"2016-05-24 19:00:00 (15)\n",
"2016-05-24 18:00:00 (16)\n",
"2016-05-24 17:00:00 (17)\n",
"2016-05-24 16:00:00 (18)\n",
"2016-05-24 19:00:00 (16)\n",
"2016-05-24 18:00:00 (17)\n",
"2016-05-24 17:00:00 (18)\n",
"2016-05-24 19:00:00 (17)\n",
"2016-05-24 18:00:00 (18)\n",
"2016-05-24 19:00:00 (18)\n"
2016-04-20 19:05:36 -05:00
]
}
],
"source": [
"t = DataAccessLayer.getAvailableTimes(request)\n",
2016-05-24 15:29:46 -05:00
"for time in t: \n",
" print str(time)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* note the difference above where the forecast hour () is included in the DataTime object\n",
"* also note that the array is sorted by *Validation Time* (2016-05-24 10:00:00 (0), 2016-05-24 11:00:00 (0), 2016-05-24 10:00:00 (1), 2016-05-24 12:00:00 (0), etc.).\n",
2016-04-20 19:05:36 -05:00
"\n",
2016-05-24 15:29:46 -05:00
"### Querying a complete model run\n",
2016-04-20 19:05:36 -05:00
"\n",
2016-05-24 15:29:46 -05:00
"If you want to get all available times (grids) for a particular run, you must supply a DataTime array to the **getGridData()** method which includes all forecast hours. The DAF does not handle a direct request for a single cycle run (yet), so you need to filter the DataTime array.\n",
2016-04-20 19:05:36 -05:00
"\n",
2016-05-24 15:29:46 -05:00
"In this case we take the `t` object from above (all times) and compare a substring to the last available cycle `cycles[-1]` and append to a new array `fcstRun`."
]
},
{
"cell_type": "code",
"execution_count": 389,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"looking for 2016-05-24 19:00:00\n",
"2016-05-24 19:00:00 (0)\n",
"2016-05-24 19:00:00 (1)\n",
"2016-05-24 19:00:00 (2)\n",
"2016-05-24 19:00:00 (3)\n",
"2016-05-24 19:00:00 (4)\n",
"2016-05-24 19:00:00 (5)\n",
"2016-05-24 19:00:00 (6)\n",
"2016-05-24 19:00:00 (9)\n",
"2016-05-24 19:00:00 (10)\n",
"2016-05-24 19:00:00 (11)\n",
"2016-05-24 19:00:00 (12)\n",
"2016-05-24 19:00:00 (13)\n",
"2016-05-24 19:00:00 (14)\n",
"2016-05-24 19:00:00 (15)\n",
"2016-05-24 19:00:00 (16)\n",
"2016-05-24 19:00:00 (17)\n",
"2016-05-24 19:00:00 (18)\n"
]
}
],
"source": [
"print \"looking for \", str(cycles[-1])\n",
"\n",
"fcstRun = []\n",
"for time in t:\n",
" if str(time)[:19] == str(cycles[-1]):\n",
" fcstRun.append(time)\n",
"\n",
"for time in fcstRun: print time"
]
},
{
"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": 390,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"response = DataAccessLayer.getGridData(request, fcstRun)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Let's look at what we have**"
]
},
{
"cell_type": "code",
"execution_count": 391,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(151, 113)\n",
"Time : 2016-05-24 19:00:00\n",
"Model: RAP40\n",
"Parm : T\n",
"Unit : K\n"
]
}
],
"source": [
"grid = response[0]\n",
2016-04-20 19:05:36 -05:00
"\n",
2016-05-24 15:29:46 -05:00
"data = grid.getRawData()\n",
"\n",
"print data.shape\n",
"print 'Time :', cycles[-1]\n",
"print 'Model:', grid.getLocationName()\n",
"print 'Parm :', grid.getParameter()\n",
"print 'Unit :', grid.getUnit()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### getLatLonCoords()"
]
},
{
"cell_type": "code",
"execution_count": 392,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 54.24940109 54.35071945 54.45080566 ..., 57.9545517 57.91926193\n",
" 57.88272858]\n",
" [ 57.84495163 57.80593109 57.76566696 ..., 58.07667542 58.08861542\n",
" 58.09931183]\n",
" [ 58.10876846 58.11697769 58.12394714 ..., 56.40270996 56.46187973\n",
" 56.51980972]\n",
" ..., \n",
" [ 19.93209648 19.89832115 19.86351395 ..., 20.054636 20.06362152\n",
" 20.07156372]\n",
" [ 20.0784626 20.08431816 20.08912849 ..., 18.58354759 18.63155174\n",
" 18.67854691]\n",
" [ 18.72453308 18.76950836 18.81346893 ..., 17.49624634 17.42861557\n",
" 17.36001205]] [[-139.83120728 -139.32348633 -138.81448364 ..., -79.26060486\n",
" -78.70166016 -78.14326477]\n",
" [ -77.58544922 -77.02822876 -76.47161865 ..., -100.70157623\n",
" -100.13801575 -99.57427216]\n",
" [ -99.01037598 -98.44634247 -97.88218689 ..., -121.69165039\n",
" -121.15060425 -120.60871887]\n",
" ..., \n",
" [ -82.65139008 -82.26644897 -81.88170624 ..., -98.52494049\n",
" -98.13802338 -97.75105286]\n",
" [ -97.36403656 -96.97698212 -96.58989716 ..., -113.07767487\n",
" -112.69831085 -112.31866455]\n",
" [-111.93874359 -111.5585556 -111.17810822 ..., -69.85433197\n",
" -69.48160553 -69.10926819]]\n"
]
}
],
"source": [
"lons,lats = grid.getLatLonCoords()\n",
"print lats, lons"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2016-05-24 15:29:46 -05:00
"### Plotting Gridded Data\n",
2016-04-20 19:05:36 -05:00
"\n",
2016-05-24 15:29:46 -05:00
"What happens if we try to plot our data array with Basemap?"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2016-05-24 15:29:46 -05:00
"execution_count": 393,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2016-05-24 15:29:46 -05:00
"image/png": "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\nhyFcoQ83IZC6FFw6BQJ
2016-04-20 19:05:36 -05:00
"text/plain": [
2016-05-24 15:29:46 -05:00
"<matplotlib.figure.Figure at 0x7f969d303250>"
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",
"from matplotlib.transforms import offset_copy\n",
"from mpl_toolkits.basemap import Basemap, cm\n",
"import numpy as np\n",
"from numpy import linspace, transpose\n",
"from numpy import meshgrid\n",
"\n",
2016-05-24 15:29:46 -05:00
"fig = plt.figure(figsize=(12, 12), dpi=100)\n",
"m = Basemap(projection='cyl',\n",
" resolution = 'c',\n",
" llcrnrlon = lons.min(), llcrnrlat = lats.min(),\n",
" urcrnrlon =lons.max(), urcrnrlat = lats.max())\n",
"m.drawcoastlines()\n",
"m.drawstates()\n",
"m.drawcountries()\n",
"\n",
"cs = m.pcolormesh( lons, lats, data, shading='flat', latlon=True, \n",
" vmin=data.min(), vmax=data.max())\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That looks awful. The data points are irregularly spaced and must be interpolated onto a regular in order to be displayed. \n",
"\n",
"**And how about with contourf?**"
]
},
{
"cell_type": "code",
"execution_count": 394,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nSFEWn9oSEBDAxIkTady
"text/plain": [
"<matplotlib.figure.Figure at 0x7f969d3030d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(12, 12), dpi=100)\n",
"m = Basemap(projection='cyl',\n",
" resolution = 'c',\n",
" llcrnrlon = lons.min(), llcrnrlat = lats.min(),\n",
" urcrnrlon =lons.max(), urcrnrlat = lats.max())\n",
"m.drawcoastlines()\n",
"m.drawstates()\n",
"m.drawcountries()\n",
"\n",
"cs = m.contourf( lons, lats, data, shading='flat', latlon=True, \n",
" vmin=data.min(), vmax=data.max())\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Doesn't look any better here.\n",
"\n",
"So now let's interpolate.\n",
"\n",
"### Plotting an interpolated grid with Basemap\n",
2016-04-20 19:05:36 -05:00
"\n",
2016-05-24 15:29:46 -05:00
"Because the grid is irregularly spaced (grid x/y does not correspond to lat/lon since the grid has a native projection - notice the boundary curvature in the following Mercator-projected plots), the data and lat/lon must be interpolated onto a regular grid using **`mtri.LinearTriInterpolator()`**. "
]
},
{
"cell_type": "code",
"execution_count": 395,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr4AAAGkCAYAAADXIiYVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4FFUXh9/d9F5pKbTQQ+9VQEGaIFJVepGAoAgKKooU\nKdJFFAjqJ6IgSld6EZQaegfpCSGEENJ72f3+GELabrJltiXzPs8+kNmZe8+0O789c+45MqVSiYSE\nhISEhISEhERJR25qAyQkJCQkJCQkJCSMgSR8JSQkJCQkJCQkSgWS8JWQkJCQkJCQkCgVSMJXQkJC\nQkJCQkKiVCAJXwkJCQkJCQkJiVKBJHwlJCQkJCQkJCRKBdZiNCKTyaScaBISEhISEhISEgZHqVTK\ndN1WNI+vUqkU/ZOdnc2uXbvo3r073t7e9OnTh1WrVnHnzp1C6yoUCsLCwtizZw+LFi1i+PDhLFiw\nIN86MTExbNiwgbfeegt3d3dat26Np6cnly5dIiwsjPHjxxMfH2+QfZE+hvuEhoby+uuvm9wOS/+0\nb9/e5DaY+vPs2TO6dOlicjvM+XP//n08PT2JjIw0uS3Sx/Cf2NhYli9fTq1atQgMDGTFihXExcWZ\n3C5z+8yfPx8nJyf8/f25ePHii+WJiYn4+flx7Ngxbty4QZs2bWjdujXXr18vts20tDQ2b96stS3B\nwcE0atSoUB9Hjx7l5MmTpKeno1Qq+fPPP/Hz82PkyJGEhISwdu1axowZw759+0x+PIv66ItMlEZk\nMqUY7RgThULBG2+8wY0bN5gwYQItWrTA39+fuXPn8sUXX1CuXDlTmyihIZGRkYwaNYpdu3aZ2hSL\npkOHDhw5ckTr7fbSUXxjRCCYIK23USgUHH95Du2OfKF2nSCCDWpDcX2K1SbA9pA3ddvw60mQlQkf\nfQuzRDNHXGaY2gDxULYwtQWCc+uff/5h1apV7N+/nwEDBrB06VKcnJxMbZrJycrKokqVKnh7e7Nz\n5058fX3zfb9hwwY+/vhjUlNTmTlzJu+++y5yuWEiTY8dO0b37t3ZvXs3bdu2VbnOkydPeP/99/nj\njz/w8vJCJpPh4OCAQqEgLS2No0ePUrt2bYPYJwYymQylHh7fUit8AcLCwjh06BCnTp0iJCSE27dv\nU6dOHTIzMxk+fDiDBw/G29vb1GZKFENcXBxvvvkme/fuNbUpFo22wtdcBW9RaCIaj3aYbXbCN6df\nMdvLi9YCOC4aBtaC709CxerCMnMUwCVI/IJ5CGAQnA0DBw5k9OjRDBkyxNTmmJzk5GRmzpzJjBkz\ncHZ2LvS9Uqlk6dKl9OvXj0qVKhncnrCwMD766CMePHhAv379+Oijj/IJ7ZEjR3L9+nVat25Nq1at\naNWqFampqdStW5dZs2YxZcoUrKysDG6nrkjCVySUSiUrVqxg0aJFhIeHY2Njw8SJE1m0aJGpTZMo\nhpSUFHr16sXBgwdNbYpFo6nwtUTBm5fixKNYwtdQItVQaC1+186D25dg7u/5l5ujAIYSJYLNQQD/\n+OOPHDx4kN9++83UpkioISsriwULFrBjxw4CAgJYsmQJPj4+KtfNyMhgzZo1/PTTTzx9+pShQ4cy\nfPhwqlWrZmSri0cSviKxYMECPvnkkxd/b9++nYsXL9K+fXs6dOhgOsMkiiUrK4tOnTrp9JreLAjR\n7P7d26JDvr+7hhwR1YwO4+DIqsL9GAJ1olAbb6pYfecIvt4tNgJFC19TeXuNicYCODUZBtSABduh\nTjPV65irCIYSJYRNwtMIGFQPdj8Ba+siz7Vyt/HMklDN33//zdChQwkLCys2zOLy5cusXbuW9evX\nU6NGDcaOHcugQYOMZGnx6Ct8RcnqUBKYOHEi2dnZfPbZZwD07t0bADc3N+bPn8+4ceNMaZ5EEVhb\nW+hlrKHgzUFsoWtKjCFwNSGvyNse8uYL8auOYIKKtd1SBa/WODjBqBnw3cfw7SGQqbie1YlLcxDE\nOTZIAlg3yvhA+Ypw9RQ0bJt7HFWcW1l34V9JAJuOWrVqUa1atWJF77Vr1zh+/DjR0dE4Ojpy+fJl\ntmzZwsCBAy33WVuAkrEXImBvb8+0adMYMmQIU6ZM4a+//sLT05Pw8HCOHj2Kvb09I0aMMLWZEiUB\nLQWvMdjbogMxrhfY26KRqU0xKGKI0pIubHu32Ki51/e1kfDbUji1D1p11bwTcxLEkgDWndY94ORu\nQfjmMAO151ESwKbjgw8+YObMmUWuk5aWRteuXQkPD6dGjRosW7aMXr16GWwinqmQhG8BvLy86Nu3\nL5cuXeLOnTvcuXOHgIAAdu7cydKlS5k0aRIyVZ4NCcvBDIWnKTBGSIM5oS7EIYeC3t4cz25JF7qq\n0Fj8WltDy65w8PfihW9GOty9AtfPwM2z8PiBIJy6DAKv51l0xBCfuornvNtJIlgzWneHRe/CuHn5\nlxchfpkBspDn/zeR57+0Ce+MjAwePHhQbNimvb09Dx484OjRo2zatImxY8cya9Ys+vfvT//+/ale\nvbpxDDYwJUvG68nHH39M2bJlCQ4O5sMPPyQyMpKAgAAAXnvtNVq0aMHMmTNRKBQmtlSiIBrFmIfI\nJNGLIHhLu+iFwkJXQgcObYLDW2DM7PzLszLh1kXY8QMsGAvDm0JnD5g7ShC9tZvBgIlw5zIMrAkf\n9oS/twjiWF9mFPhIGI7AFvDkIUQ9KvxdcV59E4a7yLrnep9LA9OnT2f48OEarWtlZUWHDh347rvv\nePToEV9//TWPHj2iXbt2NGrUiHnz5nH79m3DGmxgJI9vHtq3b8/Bgwd59Ei4iQvmJ2zTpg1ubm5M\nnTqVuXPnYmdnZwozJbRFErsvKG2CNwd1qcByPJsFRbBCoSBYXvo8vVpx8RgsHg/L9kByAuz6GW6c\nhRtnBM9u+UrCpLdaTaH7MKjeAOwd87fxUi9ISRLE8+ZvYUEQdH5TWL92U9Vxw9oiiV/DYWUFLbvA\nyT3w+ujC36vz/JpDjDeC+C0N3t9Dhw5x+vRprbezsrKiffv2tG/fnm+++YZjx46xadMmateuzc6d\nO+naVYvwJjNCyupQAKVSyZEjR1i8eDHnz59nwoQJjB07Fi8vrxfrhIaGsnjxYubNm4eLi4sJrbVs\n1KXF0mUSV/2P3Vh4pFGJmgAmJpoI3qkdLrDwiBTje7LHAhr9GIR9eXcjWGS+FBnq8DgUhjUGlIJ3\n16uCIFRrNRX+rdEInHQYGyMewJ51sPtnsLUXBHDXwcJEKgnzZM+vcGQLLNim+nszEbk6secydKsv\nSlOmEti//vorJ0+e5LvvvhOlva1btzJt2jQuXryIvb29KG1qi5TOzIBcu3aNJUuWsH37dgYNGsSk\nSZOoWrUqAE+fPmXmzJnMnDmTMmXKmNhSy0NM0Qu5qbgkctHWu1vSha+msbpnB39HwAfd8Gha1cAW\nWS6p4c8I33gS90aVcWtcmd23VHj79EGphEvHBC/ykS1Qt5Uggl96HSLuw4HfCodXSJiG2KfQrxrs\niQJbFW9BjS1891zO/b9IolVMjC2AW7Zsyd9//42jo2Ox6yqVSq5cuULNmjVVvtGOi4sjMDCQjRs3\n0q5dO0OYqxFSOjMDEhgYyP/+9z/mzJnDihUraN68OS+//DJTpkyhWbNmLFiwgE8//ZQPP/yQypUr\nm9pci6Co4geSt1Z/Smsog5jYejmTHhlnajPMGgc/L6p/9NqLv8WIl87nYZbJoGE74TN5ORzZBtvX\nwOxh4OIOU1cJ4liaaGx6PMpA5drCD5Vmr5jGhrxit+ByMxO/xsxscfbsWcqVK6eR6AVITEykQYMG\n+ZZ17dqV/v37ExgYSHBwMK+//rpJRa8YSB5fLUhMTOTHH39k2bJlVK5cmSlTptCpUydmz56Np6cn\nnTp1on79+iUq9ccbbNQo56o+BQnEELztx8E/pdDjK6bQLckeX20yM9ycvQV7Hw8qj37ZgBZJaMr2\nkDfhaogwSa5tD7BzhF1
"text/plain": [
"<matplotlib.figure.Figure at 0x7f96980e9350>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 12), dpi=100)\n",
2016-04-20 19:05:36 -05:00
"map = Basemap(projection='cyl',\n",
" resolution = 'c',\n",
" llcrnrlon = lons.min(), llcrnrlat = lats.min(),\n",
" urcrnrlon =lons.max(), urcrnrlat = lats.max()\n",
")\n",
"map.drawcoastlines()\n",
"map.drawstates()\n",
"map.drawcountries()\n",
"\n",
2016-05-24 15:29:46 -05:00
"x = linspace(0, map.urcrnrx, data.shape[1])\n",
"y = linspace(0, map.urcrnry, data.shape[0])\n",
2016-04-20 19:05:36 -05:00
"xx, yy = meshgrid(x, y)\n",
"ngrid = len(x)\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",
2016-05-24 15:29:46 -05:00
" lats.flatten()), data.flatten())\n",
2016-04-20 19:05:36 -05:00
"rdata = tli(rlons, rlats)\n",
"\n",
2016-05-24 15:29:46 -05:00
"cs = map.contourf(rlons, rlats, rdata, latlon=True, vmin=data.min(), vmax=data.max())\n",
2016-04-20 19:05:36 -05:00
"cbar = map.colorbar(cs,location='bottom',pad=\"5%\")\n",
2016-05-24 15:29:46 -05:00
"cbar.set_label(grid.getParameter() + \" (\" + grid.getUnit() + \")\")\n",
2016-04-20 19:05:36 -05:00
"\n",
2016-05-24 15:29:46 -05:00
"plt.show()"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2016-05-24 15:29:46 -05:00
"**and with pcolormesh**"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2016-05-24 15:29:46 -05:00
"execution_count": 396,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2016-05-24 15:29:46 -05:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq8AAAGkCAYAAAAfTszDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnWd4VEUXgN8t2fRCQkIIBELovXeQEjrSq9KRosgnqDRF\nBGmCoIINOzZUFFRAQHpTmvRO6BACBALpdZP9fiwlZQ6wkgr3fZ48kJPZubP3zp177pyms1gsaGho\naGhoaGhoaOQH9Lk9AA0NDQ0NDQ0NDY2HRVNeNTQ0NDQ0NDQ08g2a8qqhoaGhoaGhoZFv0JRXDQ0N\nDQ0NDQ2NfIOmvGpoaGhoaGhoaOQbNOVVQ0NDQ0NDQ0Mj32C0pbFOp9PyamloaGhoaGhoaOQIFotF\nl1Fmk/J6u5OsGU0GgoODWbBgAYsWLaJUqVK0bNmSli1bUrduXezs7NK1jYyM5NixYxw9epSjR49y\n6dIlfvjhBxwcHAAwm81s376dP//8kxUrVhAeHo6/vz8dOnRg0qRJTJkyhbZt29KgQYNs+S4a2UfT\npk3ZvHlzbg8j3/Nfz+N+KijlrkQr5S6CPEVYegyYlfIYXJXy7+ifSRaHo7JtRhY3/Ypem5/jMFWU\nf2/B+ofq595xnZTyFAxKebTwnQpxTSmPwEMpP0eAUi59r+Oh6mvIJfv0v1ssMDIIAp+BekMztw9R\nd8MNQR4jyNWXXH46+Qryajb2n4+wjMj+Y6SmprJmzRoWLFjAP//8Q9++fXn++ecpX7589h88H3H+\n/HlKliyJq6srU6ZMYdSoUeh0Vt1q5MiRWCwW5syZw+TJk/nuu+9499136dOnz902EqtXr6Zu3bp4\neno+9FjOnTtHjx496NevH6NGjborv3btGn///TfNmjXD09OTCxcu8MILLxASEsKcOXNISUlh+/bt\n6PV6pk6d+t9ORA4hnTedLcqoTqez5MeiBj///DN9+vRhwoQJNGzYkNq1a/Ptt99SoUIF2rVrl9vD\n07CBfK+8XlffiDe8XZTyROyVcr+b4Uq57pz6sObS6X8PagcbVsENN3dl+3AKKuVJmJRyTXl9DJVX\ngGP/wujO8NopMGX4fprymjPYvMWUBdy8CFs/h3++At9y0O0dCKht/dst4TMpcneW17N8hLnGmDFj\nWLBgAT/++COdOnVK97ebN29Srlw5XFxcqFu3LvPnz8fHxyfbxuLn50fv3r2ZO3cuen1mL9CUlBQ+\n+ugjJk6cSEJCAgEBAYSFhVG8eHGOHDnC+++/z+jRo7NtfFmBTqdT7rw+EcprfHw869atY9euXeza\ntYt///0Xb29vvLy8KFu2LGPGjKFKFfVCr5G30JRXK7mlvEqKYUHU45nKm0q5pLi9xytKuYRKoTtM\nZWXbvsuXpBe83hRmbqZzx5+V7RuwXSmXlFHpWkWjvrZOxCvlEtK5l14EzlBSKT8knJ8LweXUBx7e\nE0pVg34ZNJAd6uZECnJJebXtNMhECPLqglw9xWVsVbIfB8xJsP49OLkZRv1llT3hyuv8+fNp2LAh\ntWrVUv59zZo1mM1m2rdvn+1jMZvNzJo1i+XLl1OqVCnmzp2Ln5/f3b+vXLmS0aNHU69ePRo0aED9\n+vWpVKkSzZs3x2w2s2rVKjw81C/FeQVJeX2cb7u7ODo60rFjRzp27AjA7t27GTduHFu2bGHPnj3s\n2LGDU6dO5fIoNR6G/PjypJFH0enAnN+35XKAoTNgRH3oMAw8bNX4NPI1RhM0GQGrZkBiLNg75/aI\ncp205nkVrVu3zqGRgNFo5I033uCNN95gw4YN9O3bl5SUFF5//XVat25N+/btlUr01KlT+eSTTwgI\nCKBdu3YMGjSI5s2bYzCoX8zzIk+E8pqWM2fOULdu3bu/jx07lgYNGjB9+nQmTpz4QL8UjXzGQeF6\n2niPWvwe3CYtuljhDw629aORjTi6QMTV3B5F3qdoaWjWC36YCSPfy+3RaOQ0jm5Wl4GTm6DK07Z/\n3gC62Qq5tEZK75PJgjxRkF+Rh2T5Vf5bfiUoKIigoCDCwsLo2LEjp06dYuTIkcq2TZs2pWnTpoSH\nh/PTTz/x2muvERYWRv/+/Xn11VcpUKBADo/edp445bVkyZKsXbuWkSNHEhwczOzZ9+6qnTt38vvv\nv2cKENPIO+T3l4tYN9uy0xWME9wDQtXtLSXU8ktuhdP9nmC8wSW3gphIsmk89ja278VipbwCx5Ry\nw/1sjwrC8cokW0J3deOMLw7unhB9mbrseui+/wt7UZsXAzivlEv+w5JPreSHLJ1L0T+5qNpZNYaC\nMGYSPF0Rnn8JigZY/+CtbA5SfI/0niC5E0hPJ0m5kZSV04I8QZBLm4tqT5fsdyewtZ/sMCZUageH\nV1qVV+nxaNutq5FN+Pj4oNPpGDhw4H3bhYeHs2nTJs6ePYudnR3Xrl1j9erVdO7cWXSJyEs8kXle\nW7ZsyZEjR3j33Xdxc3PD398fgI0bNzJmzBji4uJyeYQaGhrZjpsX3BTeAjTS4+0LfUbC/Em5PRKN\n3KByeziyypqBQiNPc+DAAby8vHBxUfva32HatGn06NGDTz/9lJYtW3L9+nX27t2bLxRXeAJ3Xu9g\nNBpp1KgRHTp0YNGiRbz99ttMmDCBq1evMnbsWKZNm2ZTygqN+3OUUkq5H2rlwSlOHcWRhIGriiAd\npxR1e7eHHJ/GE4i7N9wKy+1R5B+aPg19GsOsb+B+vnEWC1w7B6f3WH/O7IOi5aDqQChe0+prrJG/\n8C0HOj1cOQZuFXN7NI/GBtCpHu1SwF9NhaywQgYIiT8AsHxw31FlGePGjePjjz9+YLt58+bx0ksv\n8euvv/Lrr7/y2Wef0aVLF3r06EGTJk0wGvO2epi3R5dNrF+/nqFDrXkL+/Xrx+HDh6lUqRIAvr6+\nzJw5k4kTJzJhwgSKFi2am0PVyIDNL/5nBblkEfZXi6Pd1aZZ+0S1GV3dGuwTU5Vy5zDBdir4yCYG\nquWhTupV9RqF0v2eTBTXKIQTaitDovANkoSIeimNk8Q11OljJLcEk+DYpjKlV+awsu2eVul3FGIu\nppISepwI1P5dUkYE6bsuj+uolFdwUrtISOfgvPAENAuO2lJmCGn89sK5dHJSzwVDwFVSr1wjZkw3\nHBa8g6nkdQCSfO2xWCxYLl/Gsv8Aqfv2k7p/P5YDB8DZCUONKhhqVsXQfyAp+w+R9H0PdA72GPv0\nxti7O/rC1pxXcdHqLAqpZwT7veQGIG00Ca402Z5Cy9b+bXWTsJVHetrroEo7OLYKWgjKq60+qbb6\ntq4R5OrbXXZfeYy5ceMGcXFxlC5d+sGNgcDAQMaPH8/48eM5e/YsS5YsYfz48Vy8eJGuXbvmaUX2\niXQbKFOmDI0aNSIyMpKYmBjc3NLvz7m7uzN37lzeffddTpw4kUuj1NDQyE4Mvt6k3riZ28PI81hi\nYont0g/TwN4Yg5qQ/OdaEqbOIbFHLxJKlyOxaRDm738Akx3G54fjcmALbmf24vzrQhwmjMauXQsc\nJr6C0+Hd2M+fQ2rwKeJqNSK+S2+Sl/yOJUFyPtXIU1RuB4dW5fYoNO7DK6+8wsSJE//TZwMDAxk3\nbhx79uxh586dBAYGMmTIEAYPHpzFo8wa8p46nQMUK1aM77//nkuXLjF//nyqV69OmzZtGDNmDNWr\nW5MCOjg4MHfuXCZNmkSnTp3SZSh4HHmZWUp5F35XymegvkGk9o3/27AyoVkcNbIKg18hUsMlW6HG\nHeIGvkjqwaMkXbtO0odf3t1RNfbvh37ee+Dnly6QUu+g3mrT6XQYGtbH0LA+lrkzMS9fhfmbRVhG\nT8DSoQu6Xn2gRu18H5T52FKuGXzWG+IjwVGdH1pDRveSQihpYOqYSu5XfyX5PTPHjh2jbdu2No4s\nM4GBgQwbNoz58+czbNiwR+4vO3gildc7+Pv731VQP//8czp06EC5cuUYM2YMrVu3xmAwMGPGDN55\n5x0iIiJyNH/b44aH4FD
2016-04-20 19:05:36 -05:00
"text/plain": [
2016-05-24 15:29:46 -05:00
"<matplotlib.figure.Figure at 0x7f969808aed0>"
2016-04-20 19:05:36 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 12), dpi=100)\n",
"map = Basemap(projection='cyl',\n",
" resolution = 'c',\n",
" llcrnrlon = lons.min(), llcrnrlat = lats.min(),\n",
" urcrnrlon =lons.max(), urcrnrlat = lats.max()\n",
")\n",
"map.drawcoastlines()\n",
"map.drawstates()\n",
"map.drawcountries()\n",
2016-05-24 15:29:46 -05:00
"\n",
"cs = map.pcolormesh(rlons, rlats, rdata, latlon=True, vmin=data.min(), vmax=data.max())\n",
"cbar = map.colorbar(cs,location='bottom',pad=\"5%\")\n",
"cbar.set_label(grid.getParameter() + \" (\" + grid.getUnit() + \")\")\n",
"\n",
"plt.show()"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2016-05-24 15:29:46 -05:00
"### Plotting an interpolated grid with Cartopy"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2016-05-24 15:29:46 -05:00
"execution_count": 397,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2016-05-24 15:29:46 -05:00
"image/png": "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\nQG4Xb0V3MinSqqHXEXm
2016-04-20 19:05:36 -05:00
"text/plain": [
2016-05-24 15:29:46 -05:00
"<matplotlib.figure.Figure at 0x7f96981a74d0>"
2016-04-20 19:05:36 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 12), dpi=100)\n",
"ax = plt.axes(projection=ccrs.PlateCarree())\n",
2016-05-24 15:29:46 -05:00
"cs = plt.contourf(rlons, rlats, rdata, 60, \n",
" transform=ccrs.PlateCarree(), \n",
" vmin=rdata.min(), vmax=rdata.max())\n",
2016-04-20 19:05:36 -05:00
"ax.gridlines()\n",
2016-05-24 15:29:46 -05:00
"ax.coastlines()\n",
2016-04-20 19:05:36 -05:00
"\n",
"cbar = plt.colorbar(orientation='horizontal')\n",
2016-05-24 15:29:46 -05:00
"cbar.set_label(grid.getParameter() + \" (\" + grid.getUnit() + \")\")\n",
2016-04-20 19:05:36 -05:00
"plt.show()"
]
}
],
"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",
2016-07-13 14:58:44 -05:00
"version": "2.7.10"
2016-04-20 19:05:36 -05:00
}
},
"nbformat": 4,
"nbformat_minor": 0
}