python-awips/examples/notebooks/.ipynb_checkpoints/Gridded_Data-checkpoint.ipynb

521 lines
3.1 MiB
Text
Raw Normal View History

2016-03-15 20:27:25 -05:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## EDEX Grid Inventory"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"AVN211\n",
"AVN225\n",
"DGEX\n",
"ECMF-Global\n",
"ECMF1\n",
"ECMF10\n",
"ECMF11\n",
"ECMF12\n",
"ECMF2\n",
"ECMF3\n",
"ECMF4\n",
"ECMF5\n",
"ECMF6\n",
"ECMF7\n",
"ECMF8\n",
"ECMF9\n",
"ETA\n",
"GFS\n",
"GFS40\n",
"GFSGuide\n",
"GFSLAMP5\n",
"HPCGuide\n",
"HPCqpfNDFD\n",
"HRRR\n",
"LAMP2p5\n",
"MRMS_1000\n",
"NAM12\n",
"NAM40\n",
"NCWF\n",
"NOHRSC-SNOW\n",
"NamDNG\n",
"NamDNG5\n",
"QPE-MSR\n",
"RAP13\n",
"RAP40\n",
"RTMA\n",
"RTMA5\n",
"URMA25\n",
"estofsPR\n",
"estofsUS\n"
]
}
],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"\n",
"# Set host\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"\n",
"# Init data request\n",
"request = DataAccessLayer.newDataRequest()\n",
"\n",
"# Set datatype\n",
"request.setDatatype(\"grid\")\n",
"\n",
"# Get a list of all available models\n",
"available_grids = DataAccessLayer.getAvailableLocationNames(request)\n",
"\n",
"# Sort\n",
"available_grids.sort()\n",
"\n",
"for grid in available_grids:\n",
" print grid"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"**LocationNames** is different for different plugins\n",
"- radar is icao\n",
"- satellite is sector\n",
"\n",
"\n",
"## Requesting a Grid"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Time : 2016-02-23 15:00:00 (12)\n",
"Model: RAP40\n",
"Unit : %\n",
"Parm : RH\n",
"(151, 113)\n",
"[[ 93.05456543 93.05456543 87.05456543 ..., 73.05456543 72.05456543\n",
" 71.05456543]\n",
" [ 70.05456543 70.05456543 67.05456543 ..., 69.05456543 46.05456924\n",
" 37.05456924]\n",
" [ 40.05456924 56.05456924 68.05456543 ..., 51.05456924 73.05456543\n",
" 74.05456543]\n",
" ..., \n",
" [ 65.05456543 62.05456924 63.05456924 ..., 67.05456543 65.05456543\n",
" 46.05456924]\n",
" [ 48.05456924 59.05456924 62.05456924 ..., 4.05456877 5.05456877\n",
" 5.05456877]\n",
" [ 7.05456877 8.05456829 10.05456829 ..., 91.05456543 95.05456543\n",
" 95.05456543]]\n",
"lat array = [[ 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]]\n",
"lon array = [[-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": [
"# Grid request\n",
"request.setLocationNames('RAP40')\n",
"request.setParameters(\"RH\")\n",
"request.setLevels(\"850MB\")\n",
"\n",
"# Get available times\n",
"t = DataAccessLayer.getAvailableTimes(request)\n",
"\n",
"# Select last available time [-1]\n",
"response = DataAccessLayer.getGridData(request, [t[0]])\n",
"data = response[0]\n",
"lon,lat = data.getLatLonCoords()\n",
"\n",
"# Print info\n",
"print 'Time :', t[-1]\n",
"print 'Model:', data.getLocationName()\n",
"print 'Unit :', data.getUnit()\n",
"print 'Parm :', data.getParameter()\n",
"\n",
"# Print data array\n",
"print data.getRawData().shape\n",
"print data.getRawData()\n",
"print \"lat array =\", lat\n",
"print \"lon array =\", lon\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting a Grid with Basemap\n",
"\n",
"Using **matplotlib**, **numpy**, and **basemap**:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAACaMAAAXOCAYAAAB7c6MmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAnNwAAJzcBVAXW8gAAIABJREFUeJzs3XdYFOfaBvB76b2LSESlqSgSy7Fhb6BGjQVjjWJJjBpj\ngmLKZ44pJ0XFWBJrJIlRTERMRFQiVuzYBRVQkdgFkSpI3f3+IGxEQFi2zJb7d11eyezOzjy7wOzu\nvPc8r0gikYCIiIiIiIiIiIiIiIiIiIiIiIhIHnpCF0BERERERERERERERERERERERESaj2E0IiIi\nIiIiIiIiIiIiIiIiIiIikhvDaERERERERERERERERERERERERCQ3htGIiIiIiIiIiIiIiIiIiIiI\niIhIbgyjERERERERERERERERERERERERkdwYRiMiIiIiIiIiIiIiIiIiIiIiIiK5MYxGRERERERE\nREREREREREREREREcmMYjYiIiIiIiIiIiIiIiIiIiIiIiOTGMBoRERERERERERERERERERERERHJ\njWE0IiIiIiIiIiIiIiIiIiIiIiIikhvDaERERERERERERERERERERERERCQ3htGIiIiIiIiIiIiI\niIiIiIiIiIhIbgyjERERERERERERERERERERERERkdwYRiMiIiIiIiIiIiIiIiIiIiIiIiK5MYxG\nREREREREREREREREREREREREcmMYjYiIiIiIiIiIiIiIiIiIiIiIiOTGMBoRERERERERERERERER\nERERERHJjWE0IiIiIiIiIiIiIiIiIiIiIiIikhvDaERERERERERERERERERERERERCQ3htGIiIiI\niIiIiIiIiIiIiIiIiIhIbgyjERERERERERERERERERERERERkdwYRiMiIiIiIiIiIiIiIiIiIiIi\nIiK5GQhdwPNEItFVAC7/LBYASBGwHCIiIiIiIiIiIiIiIiIiIiIiovpyB2D2z//flUgkrYUsRhVE\nEolE6BqkRCJRLgBLoesgIiIiIiIiIiIiIiIiIiIiIiJSoDyJRGIldBHKxmk6iYiIiIiIiIiIiIiI\niIiIiIiISG5qNU0nyqfmtAQAS0tLtGnTRuBy1Nv169eRkZFR4/1mZmZo1KgRHBwcoK+vX+/9FBQU\nIDs7Gzk5OcjJyYFYLK52PRMTExQWFta6PT09PZiZmVX5Z2RkVONjsrKykJiYKF1u0aIF7O3tq6yX\n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\nTZqETZs2VVqnTZs22L1
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5b11499e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"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",
"\n",
"plt.figure(figsize=(12, 12), dpi=100)\n",
"lons,lats = data.getLatLonCoords()\n",
"\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",
"\n",
"# \n",
"# We have to reproject our grid, see https://stackoverflow.com/questions/31822553/m\n",
"#\n",
"x = linspace(0, map.urcrnrx, data.getRawData().shape[1])\n",
"y = linspace(0, map.urcrnry, data.getRawData().shape[0])\n",
"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",
" lats.flatten()), data.getRawData().flatten())\n",
"rdata = tli(rlons, rlats)\n",
"cs = map.contourf(rlons, rlats, rdata, latlon=True, vmin=0, vmax=100, cmap='YlGn')\n",
"\n",
"# add colorbar.\n",
"cbar = map.colorbar(cs,location='bottom',pad=\"5%\")\n",
"cbar.set_label(data.getParameter() + data.getUnit() )\n",
"\n",
"# Show plot\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"or use **pcolormesh** rather than **contourf**"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAACXYAAATxCAYAAACREFnnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAnNwAAJzcBVAXW8gAAIABJREFUeJzs3XdYU2cbBvA7AcIGochwAyooOFARcVTrwIF7j8/aWmvV\nVj5HcdUq2qp1fYqjiHtvRXHXVavgwK2IWkS0LqbsTfL9gaZNAVnnEJD7d11eepI373mCEJJz7vO8\nEoVCASIiIiIiIiIiIiIiIiIiIiIiIio7pOougIiIiIiIiIiIiIiIiIiIiIiIiFQx2EVERERERERE\nRERERERERERERFTGMNhFRERERERERERERERERERERERUxjDYRUREREREREREREREREREREREVMYw\n2EVERERERERERERERERERERERFTGMNhFRERERERERERERERERERERERUxjDYRURERERERERERERE\nREREREREVMYw2EVERERERERERERERERERERERFTGMNhFRERERERERERERERERERERERUxjDYRURE\nREREREREREREREREREREVMYw2EVERERERERERERERERERERERFTGMNhFRERERERERERERERERERE\nRERUxjDYRUREREREREREREREREREREREVMYw2EVERERERERERERERERERERERFTGMNhFRERERERE\nRERERERERERERERUxjDYRUREREREREREREREREREREREVMYw2EVERERERERERERERERERERERFTG\nMNhFRERERERERERERERERERERERUxjDYRUREREREREREREREREREREREVMYw2EVERERERERERERE\nRERERERERFTGMNhFRERERERERERERERERERERERUxjDYRUREREREREREREREREREREREVMZoir0D\niUQSDKD6u80UAE/E3icREREREREREREREREREREREZEIbAHovfv3XwqFwkGsHUkUCoVYc+fsQCJJ\nAGAo6k6IiIiIiIiIiIiIiIiIiIiIiIhKV6JCoTASa3IuxUhERERERERERERERERERERERFTGiL4U\nI3KWXzQEAENDQzRo0KAUdlk+paWl4ebNm/ner6+vDysrK5iZmUEqLVkmT6FQIDk5GXFxcYiLi0Ni\nYiLy6t6mqamJrKysfOfR0NCAnp5erj9aWloF1vDo0SPExMQAAKRSKVq0aJFrTGZmJm7cuAG5XJ7n\n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\n/nuphroAwNraGhs3blS
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5b1abbb790>"
]
},
"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",
"cs = map.pcolormesh(rlons, rlats, rdata, latlon=True, vmin=0, vmax=100, cmap='YlGn')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting a Grid with Cartopy"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAACYEAAAcvCAYAAAB6XKnFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAnNwAAJzcBVAXW8gAAIABJREFUeJzsnXmYFOW9tp+Z6Z6FfRPcAAFRgwKCCwooghpJNEpQMXgO\nLqhIhBMkuCQiJhpcIRJP0CCfUY7LcYu7cTtoQAQFF0AxKquAoiyyjDBb90x/fzRVU11dy1tVb209\nz31dfc3U/nZXd1X1W3c/v6JMJgNCCCGEEEIIIYQQQgghhBBCCCGEEEIIIfGkOOwGEEIIIYQQQggh\nhBBCCCGEEEIIIYQQQghxDyUwQgghhBBCCCGEEEIIIYQQQgghhBBCCIkxlMAIIYQQQgghhBBCCCGE\nEEIIIYQQQgghJMZQAiOEEEIIIYQQQgghhBBCCCGEEEIIIYSQGEMJjBBCCCGEEEIIIYQQQgghhBBC\nCCGEEEJiDCUwQgghhBBCCCGEEEIIIYQQQgghhBBCCIkxlMAIIYQQQgghhBBCCCGEEEIIIYQQQggh\nJMZQAiOEEEIIIYQQQgghhBBCCCGEEEIIIYSQGEMJjBBCCCGEEEIIIYQQQgghhBBCCCGEEEJiDCUw\nQgghhBBCCCGEEEIIIYQQQgghhBBCCIkxlMAIIYQQQgghhBBCCCGEEEIIIYQQQgghJMZQAiOEEEII\nIYQQQgghhBBCCCGEEEIIIYSQGEMJjBBCCCGEEEIIIYQQQgghhBBCCCGEEEJiDCUwQgghhBBCCCGE\nEEIIIYQQQgghhBBCCIkxlMAIIYQQQgghhBBCCCGEEEIIIYQQQgghJMZQAiOEEEIIIYQQQgghhBBC\nCCGEEEIIIYSQGEMJjBBCCCGEEEIIIYQQQgghhBBCCCGEEEJiDCUwQgghhBBCCCGEEEIIIYQQQggh\nhBBCCIkxlMAIIYQQQgghhBBCCCGEEEIIIYQQQgghJMZQAiOEEEIIIYQQQgghhBBCCCGEEEIIIYSQ\nGEMJjBBCCCGEEEIIIYQQQgghhBBCCCGEEEJiDCUwQgghhBBCCCGEEEIIIYQQQgghhBBCCIkxibAb\noKWoqGgOgN5ht4MQQgghhBBCCCGEEEIIIYQQQgghhBBCJPJZJpMZ79fKIyWBISuADQy7EYQQQggh\nhBBCCCGEEEIIIYQQQgghhBASF1gOkhBCCCGEEEIIIYQQQgghhBBCCCGEEEJiTNSSwFRatGiBPn36\n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\nmhnMp6UqnZseoT8eVOu
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5b1acc0b10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import os\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import iris\n",
"import cartopy.crs as ccrs\n",
"from cartopy import config\n",
"\n",
"lon,lat = data.getLatLonCoords()\n",
"plt.figure(figsize=(12, 12), dpi=100)\n",
"ax = plt.axes(projection=ccrs.PlateCarree())\n",
"cs = plt.contourf(rlons, rlats, rdata, 60, transform=ccrs.PlateCarree(), vmin=0, vmax=100, cmap='YlGn')\n",
"ax.coastlines()\n",
"ax.gridlines()\n",
"\n",
"# add colorbar\n",
"cbar = plt.colorbar(orientation='horizontal')\n",
"cbar.set_label(data.getParameter() + data.getUnit() )\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(Mar 15 16 22:52:00 , Mar 15 16 22:52:00 )\n",
"430\n",
"86\n"
]
},
{
"data": {
"image/png": "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\n0atvfKaFs6fZ1Ru+8Jp
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5b1148c350>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"from metpy.calc import get_wind_components\n",
"from metpy.cbook import get_test_data\n",
"from metpy.plots import StationPlot, StationPlotLayout, simple_layout\n",
"from metpy.units import units\n",
"\n",
"# Initialize\n",
"data,latitude,longitude,stationName,temperature,dewpoint,seaLevelPress,windDir,windSpeed = [],[],[],[],[],[],[],[],[]\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"obs\")\n",
"\n",
"#\n",
"# we need to set one station to query latest time. this is hack-y and should be fixed\n",
"# because when you DON'T set a location name, you tend to get a single observation\n",
"# that came in a second ago, so your \"latest data for the last time for all stations\"\n",
"# data array consists of one village in Peru and time-matching is suspect right now.\n",
"#\n",
"# So here take a known US station (OKC) and hope/assume that a lot of other stations \n",
"# are also reporting (and that this is a 00/20/40 ob). \n",
"#\n",
"request.setLocationNames(\"KOKC\")\n",
"datatimes = DataAccessLayer.getAvailableTimes(request)\n",
"\n",
"# Get most recent time for location\n",
"time = datatimes[-1].validPeriod\n",
"\n",
"# \"presWeather\",\"skyCover\",\"skyLayerBase\"\n",
"# are multi-dimensional(??) and returned seperately (not sure why yet)... deal with those later\n",
"request.setParameters(\"presWeather\",\"skyCover\", \"skyLayerBase\",\"stationName\",\"temperature\",\"dewpoint\",\"windDir\",\"windSpeed\",\n",
" \"seaLevelPress\",\"longitude\",\"latitude\")\n",
"request.setLocationNames()\n",
"response = DataAccessLayer.getGeometryData(request,times=time)\n",
"print time\n",
"PRES_PARAMS = set([\"presWeather\"])\n",
"SKY_PARAMS = set([\"skyCover\", \"skyLayerBase\"])\n",
"# Build ordered arrays\n",
"wx,cvr,bas=[],[],[]\n",
"for ob in response:\n",
" #print ob.getParameters()\n",
" if set(ob.getParameters()) & PRES_PARAMS :\n",
" wx.append(ob.getString(\"presWeather\"))\n",
" continue\n",
" if set(ob.getParameters()) & SKY_PARAMS :\n",
" cvr.append(ob.getString(\"skyCover\"))\n",
" bas.append(ob.getNumber(\"skyLayerBase\"))\n",
" continue\n",
" latitude.append(float(ob.getString(\"latitude\")))\n",
" longitude.append(float(ob.getString(\"longitude\")))\n",
" #stationName.append(ob.getString(\"stationName\"))\n",
" temperature.append(float(ob.getString(\"temperature\")))\n",
" dewpoint.append(float(ob.getString(\"dewpoint\")))\n",
" seaLevelPress.append(float(ob.getString(\"seaLevelPress\")))\n",
" windDir.append(float(ob.getString(\"windDir\")))\n",
" windSpeed.append(float(ob.getString(\"windSpeed\")))\n",
" \n",
" \n",
"print len(wx)\n",
"print len(temperature)\n",
"\n",
"\n",
"# Convert\n",
"data = dict()\n",
"data['latitude'] = np.array(latitude)\n",
"data['longitude'] = np.array(longitude)\n",
"data['air_temperature'] = np.array(temperature)* units.degC\n",
"data['dew_point_temperature'] = np.array(dewpoint)* units.degC\n",
"#data['air_pressure_at_sea_level'] = np.array(seaLevelPress)* units('mbar')\n",
"u, v = get_wind_components(np.array(windSpeed) * units('knots'),\n",
" np.array(windDir) * units.degree)\n",
"data['eastward_wind'], data['northward_wind'] = u, v\n",
"\n",
"# Convert the fraction value into a code of 0-8, which can be used to pull out\n",
"# the appropriate symbol\n",
"#data['cloud_coverage'] = (8 * data_arr['cloud_fraction']).astype(int)\n",
"\n",
"# Map weather strings to WMO codes, which we can use to convert to symbols\n",
"# Only use the first symbol if there are multiple\n",
"#wx_text = make_string_list(data_arr['weather'])\n",
"#wx_codes = {'':0, 'HZ':5, 'BR':10, '-DZ':51, 'DZ':53, '+DZ':55,\n",
"# '-RA':61, 'RA':63, '+RA':65, '-SN':71, 'SN':73, '+SN':75}\n",
"#data['present_weather'] = [wx_codes[s.split()[0] if ' ' in s else s] for s in wx]\n",
"\n",
"# Set up the map projection\n",
"import cartopy.crs as ccrs\n",
"import cartopy.feature as feat\n",
"from matplotlib import rcParams\n",
"rcParams['savefig.dpi'] = 255\n",
"proj = ccrs.LambertConformal(central_longitude=-95, central_latitude=35,\n",
" standard_parallels=[35])\n",
"state_boundaries = feat.NaturalEarthFeature(category='cultural',\n",
" name='admin_1_states_provinces_lines',\n",
" scale='110m', facecolor='none')\n",
"# Create the figure\n",
"fig = plt.figure(figsize=(20, 10))\n",
"ax = fig.add_subplot(1, 1, 1, projection=proj)\n",
"\n",
"# Add map elements \n",
"ax.add_feature(feat.LAND, zorder=-1)\n",
"ax.add_feature(feat.OCEAN, zorder=-1)\n",
"ax.add_feature(feat.LAKES, zorder=-1)\n",
"ax.coastlines(resolution='110m', zorder=2, color='black')\n",
"ax.add_feature(state_boundaries)\n",
"ax.add_feature(feat.BORDERS, linewidth='2', edgecolor='black')\n",
"ax.set_extent((-118, -73, 23, 50))\n",
"\n",
"# Start the station plot by specifying the axes to draw on, as well as the\n",
"# lon/lat of the stations (with transform). We also the fontsize to 12 pt.\n",
"stationplot = StationPlot(ax, data['longitude'], data['latitude'],\n",
" transform=ccrs.PlateCarree(), fontsize=12)\n",
"\n",
"# The layout knows where everything should go, and things are standardized using\n",
"# the names of variables. So the layout pulls arrays out of `data` and plots them\n",
"# using `stationplot`.\n",
"simple_layout.plot(stationplot, data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}