mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-23 22:57:56 -05:00
deploy: b3519f1719
This commit is contained in:
parent
d8873eb3c2
commit
e850901742
8 changed files with 403 additions and 40 deletions
BIN
_images/Grids_and_Cartopy_21_1.png
Normal file
BIN
_images/Grids_and_Cartopy_21_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 220 KiB |
BIN
_images/Grids_and_Cartopy_23_0.png
Normal file
BIN
_images/Grids_and_Cartopy_23_0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 147 KiB |
Binary file not shown.
Before Width: | Height: | Size: 212 KiB |
Binary file not shown.
Before Width: | Height: | Size: 139 KiB |
|
@ -2,8 +2,52 @@
|
||||||
Grids and Cartopy
|
Grids and Cartopy
|
||||||
=================
|
=================
|
||||||
`Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Grids_and_Cartopy.ipynb>`_
|
`Notebook <http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Grids_and_Cartopy.ipynb>`_
|
||||||
A simple example of requesting and plotting AWIPS grids with Matplotlib
|
Python-AWIPS Tutorial Notebook
|
||||||
and Cartopy.
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Objectives
|
||||||
|
==========
|
||||||
|
|
||||||
|
- Create a colorized plot for the continental US of model data (grib).
|
||||||
|
- Access the model data from an EDEX server and limit the data returned
|
||||||
|
by using model specific parameters.
|
||||||
|
- Use both *pcolormesh* and *contourf* to create colorized plots, and
|
||||||
|
compare the differences between the two.
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Table of Contents
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
| `1
|
||||||
|
Imports <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#imports>`__\
|
||||||
|
| `2 Define Data
|
||||||
|
Request <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#define-data-request>`__\
|
||||||
|
| `3 Limit Results Based on
|
||||||
|
Time <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#limit-results-based-on-time>`__\
|
||||||
|
| `4 Function:
|
||||||
|
make_map() <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#function-make-map>`__\
|
||||||
|
| `5 Use the Grid
|
||||||
|
Data! <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#use-the-grid-data>`__\
|
||||||
|
| `5.1 Plot Using
|
||||||
|
pcolormesh <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#plot-using-pcolormesh>`__\
|
||||||
|
| `5.2 Plot Using
|
||||||
|
contourf <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#plot-using-contourf>`__\
|
||||||
|
| `6 See
|
||||||
|
Also <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#see-also>`__\
|
||||||
|
| `6.1 Related
|
||||||
|
Notebooks <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#related-notebooks>`__\
|
||||||
|
| `6.2 Additional
|
||||||
|
Documentation <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#additional-documentation>`__\
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
1 Imports
|
||||||
|
---------
|
||||||
|
|
||||||
|
Start by importing both the python-awips specific library, as well as
|
||||||
|
the libraries needed for plotting and manipulating the data
|
||||||
|
|
||||||
.. code:: ipython3
|
.. code:: ipython3
|
||||||
|
|
||||||
|
@ -11,23 +55,92 @@ and Cartopy.
|
||||||
import cartopy.crs as ccrs
|
import cartopy.crs as ccrs
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
|
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
|
||||||
%matplotlib inline
|
from scipy.constants import convert_temperature
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
2 Define Data Request
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
If you read through the `python-awips: How to Access
|
||||||
|
Data <https://nbviewer.jupyter.org/github/Unidata/pyaos-ams-2021/blob/master/notebooks/dataAccess/python-awips-HowToAccessData.ipynb>`__
|
||||||
|
training, you will know that we need to set an EDEX url to access our
|
||||||
|
server, and then we create a data request. In this example we use *grid*
|
||||||
|
as the data type to define our request. In addition to setting the data
|
||||||
|
type, the location, parameters and levels are also set as **RAP13**,
|
||||||
|
**T** (for temperature), and **2.0FHAG** (for Fixed Height Above Ground
|
||||||
|
in meters), respectively.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
|
DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
|
||||||
request = DataAccessLayer.newDataRequest()
|
request = DataAccessLayer.newDataRequest()
|
||||||
request.setDatatype("grid")
|
request.setDatatype("grid")
|
||||||
request.setLocationNames("RAP13")
|
request.setLocationNames("RAP13")
|
||||||
request.setParameters("T")
|
request.setParameters("T")
|
||||||
request.setLevels("2.0FHAG")
|
request.setLevels("2.0FHAG")
|
||||||
|
|
||||||
|
# Take a look at our request
|
||||||
|
print(request)
|
||||||
|
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
DefaultDataRequest(datatype=grid, identifiers={}, parameters=['T'], levels=[<dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.level.Level.Level object at 0x11127bfd0>], locationNames=['RAP13'], envelope=None)
|
||||||
|
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
3 Limit Results Based on Time
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Models produce many different time variants during their runs, so let’s
|
||||||
|
limit the data to the most recent time and forecast run.
|
||||||
|
|
||||||
|
.. container:: alert-info
|
||||||
|
|
||||||
|
Note: You can play around with different times and forecast runs to
|
||||||
|
see the differences.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
cycles = DataAccessLayer.getAvailableTimes(request, True)
|
cycles = DataAccessLayer.getAvailableTimes(request, True)
|
||||||
times = DataAccessLayer.getAvailableTimes(request)
|
times = DataAccessLayer.getAvailableTimes(request)
|
||||||
fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)
|
fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)
|
||||||
response = DataAccessLayer.getGridData(request, [fcstRun[0]])
|
|
||||||
grid = response[0]
|
|
||||||
data = grid.getRawData()
|
|
||||||
lons, lats = grid.getLatLonCoords()
|
|
||||||
bbox = [lons.min(), lons.max(), lats.min(), lats.max()]
|
|
||||||
|
|
||||||
|
# Get the most recent grid data
|
||||||
|
response = DataAccessLayer.getGridData(request, [fcstRun[0]])
|
||||||
|
|
||||||
|
print('Number of available times:', len(times))
|
||||||
|
print('Number of available forecast runs:', len(fcstRun))
|
||||||
|
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
Number of available times: 74
|
||||||
|
Number of available forecast runs: 8
|
||||||
|
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
4 Function: make_map()
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
In order to plot more than one image, it’s easiest to define common
|
||||||
|
logic in a function. Here, a new function called **make_map** is
|
||||||
|
defined. This function uses the `matplotlib.pyplot package
|
||||||
|
(plt) <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html>`__
|
||||||
|
to create a figure and axis. The coastlines (continental boundaries) are
|
||||||
|
added, along with lat/lon grids.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
def make_map(bbox, projection=ccrs.PlateCarree()):
|
def make_map(bbox, projection=ccrs.PlateCarree()):
|
||||||
fig, ax = plt.subplots(figsize=(16, 9),
|
fig, ax = plt.subplots(figsize=(16, 9),
|
||||||
subplot_kw=dict(projection=projection))
|
subplot_kw=dict(projection=projection))
|
||||||
|
@ -39,8 +152,44 @@ and Cartopy.
|
||||||
gl.yformatter = LATITUDE_FORMATTER
|
gl.yformatter = LATITUDE_FORMATTER
|
||||||
return fig, ax
|
return fig, ax
|
||||||
|
|
||||||
with pcolormesh
|
`Top <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html>`__
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
5 Use the Grid Data!
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Here we get our grid data object from our previous response, and then
|
||||||
|
get the raw data array off that object. We also get the latitude and
|
||||||
|
longitude arrays, and create a bounding box that we’ll use when creating
|
||||||
|
our plots (by calling **make_map** defined above). Finally, we’ll
|
||||||
|
convert our data from degrees Kelvin to Farenheit to make the plot more
|
||||||
|
understandable.
|
||||||
|
|
||||||
|
.. code:: ipython3
|
||||||
|
|
||||||
|
grid = response[0]
|
||||||
|
data = grid.getRawData()
|
||||||
|
lons, lats = grid.getLatLonCoords()
|
||||||
|
bbox = [lons.min(), lons.max(), lats.min(), lats.max()]
|
||||||
|
|
||||||
|
# Convert temp from Kelvin to F
|
||||||
|
destUnit = 'F'
|
||||||
|
data = convert_temperature(data, 'K', destUnit)
|
||||||
|
|
||||||
|
5.1 Plot Using pcolormesh
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This example shows how to use
|
||||||
|
`matplotlib.pyplot.pcolormesh <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.pcolormesh.html>`__
|
||||||
|
to create a colorized plot. We use our **make_map** function to create a
|
||||||
|
subplot and then we create a color scale (cs) and colorbar (cbar) with a
|
||||||
|
label for our plot.
|
||||||
|
|
||||||
|
.. container:: alert-info
|
||||||
|
|
||||||
|
Note: You may see a warning appear with a red background, this is
|
||||||
|
okay, and will go away with subsequent runs of the cell.
|
||||||
|
|
||||||
.. code:: ipython3
|
.. code:: ipython3
|
||||||
|
|
||||||
|
@ -49,16 +198,28 @@ with pcolormesh
|
||||||
cs = ax.pcolormesh(lons, lats, data, cmap=cmap)
|
cs = ax.pcolormesh(lons, lats, data, cmap=cmap)
|
||||||
cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')
|
cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')
|
||||||
cbar.set_label(grid.getLocationName() +" "+ grid.getLevel() + " " \
|
cbar.set_label(grid.getLocationName() +" "+ grid.getLevel() + " " \
|
||||||
+ grid.getParameter() + " (" + grid.getUnit() + ") " \
|
+ grid.getParameter() + " (" + destUnit + ") " \
|
||||||
+ "valid " + str(grid.getDataTime().getRefTime()))
|
+ "valid " + str(grid.getDataTime().getRefTime()))
|
||||||
|
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
.. image:: Grids_and_Cartopy_files/Grids_and_Cartopy_3_0.png
|
/Users/scarter/opt/miniconda3/envs/python3-awips/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py:1598: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.
|
||||||
|
X, Y, C, shading = self._pcolorargs('pcolormesh', *args,
|
||||||
|
|
||||||
|
|
||||||
with contourf
|
|
||||||
~~~~~~~~~~~~~
|
.. image:: Grids_and_Cartopy_files/Grids_and_Cartopy_21_1.png
|
||||||
|
|
||||||
|
|
||||||
|
5.2 Plot Using contourf
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This example shows how to use
|
||||||
|
`matplotlib.pyplot.contourf <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.contourf.html>`__
|
||||||
|
to create a colorized plot. We use our **make_map** function to create a
|
||||||
|
subplot and then we create a color scale (cs2) and colorbar (cbar2) with
|
||||||
|
a label for our plot.
|
||||||
|
|
||||||
.. code:: ipython3
|
.. code:: ipython3
|
||||||
|
|
||||||
|
@ -67,10 +228,44 @@ with contourf
|
||||||
vmin=data.min(), vmax=data.max())
|
vmin=data.min(), vmax=data.max())
|
||||||
cbar2 = fig2.colorbar(cs2, shrink=0.7, orientation='horizontal')
|
cbar2 = fig2.colorbar(cs2, shrink=0.7, orientation='horizontal')
|
||||||
cbar2.set_label(grid.getLocationName() +" "+ grid.getLevel() + " " \
|
cbar2.set_label(grid.getLocationName() +" "+ grid.getLevel() + " " \
|
||||||
+ grid.getParameter() + " (" + grid.getUnit()+ ") " \
|
+ grid.getParameter() + " (" + destUnit + ") " \
|
||||||
+ "valid " + str(grid.getDataTime().getRefTime()))
|
+ "valid " + str(grid.getDataTime().getRefTime()))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. image:: Grids_and_Cartopy_files/Grids_and_Cartopy_5_0.png
|
.. image:: Grids_and_Cartopy_files/Grids_and_Cartopy_23_0.png
|
||||||
|
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
6 See Also
|
||||||
|
----------
|
||||||
|
|
||||||
|
6.1 Related Notebooks
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- `Grid Levels and
|
||||||
|
Parameters <https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html>`__
|
||||||
|
|
||||||
|
6.2 Additional Documention
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**python-awips:** \*
|
||||||
|
`awips.DataAccessLayer <http://unidata.github.io/python-awips/api/DataAccessLayer.html>`__
|
||||||
|
\*
|
||||||
|
`awips.PyGridData <http://unidata.github.io/python-awips/api/PyGridData.html>`__
|
||||||
|
|
||||||
|
**matplotlib:** \*
|
||||||
|
`matplotlib.pyplot <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html>`__
|
||||||
|
\*
|
||||||
|
`matplotlib.pyplot.subplot <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.subplot.html>`__
|
||||||
|
\*
|
||||||
|
`matplotlib.pyplot.pcolormesh <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.pcolormesh.html>`__
|
||||||
|
\*
|
||||||
|
`matplotlib.pyplot.contourf <https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.contourf.html>`__
|
||||||
|
|
||||||
|
`Top <https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html>`__
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
|
@ -101,8 +101,16 @@
|
||||||
<li class="toctree-l2"><a class="reference internal" href="GOES_Geostationary_Lightning_Mapper.html">GOES Geostationary Lightning Mapper</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="GOES_Geostationary_Lightning_Mapper.html">GOES Geostationary Lightning Mapper</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="Grid_Levels_and_Parameters.html">Grid Levels and Parameters</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="Grid_Levels_and_Parameters.html">Grid Levels and Parameters</a></li>
|
||||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">Grids and Cartopy</a><ul>
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">Grids and Cartopy</a><ul>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#with-pcolormesh">with pcolormesh</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="#objectives">Objectives</a><ul>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="#with-contourf">with contourf</a></li>
|
<li class="toctree-l4"><a class="reference internal" href="#table-of-contents">Table of Contents</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#imports">1 Imports</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#define-data-request">2 Define Data Request</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#limit-results-based-on-time">3 Limit Results Based on Time</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#function-make-map">4 Function: make_map()</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#use-the-grid-data">5 Use the Grid Data!</a></li>
|
||||||
|
<li class="toctree-l4"><a class="reference internal" href="#see-also">6 See Also</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="METAR_Station_Plot_with_MetPy.html">METAR Station Plot with MetPy</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="METAR_Station_Plot_with_MetPy.html">METAR Station Plot with MetPy</a></li>
|
||||||
|
@ -191,30 +199,120 @@
|
||||||
<div class="section" id="grids-and-cartopy">
|
<div class="section" id="grids-and-cartopy">
|
||||||
<h1>Grids and Cartopy<a class="headerlink" href="#grids-and-cartopy" title="Permalink to this headline">¶</a></h1>
|
<h1>Grids and Cartopy<a class="headerlink" href="#grids-and-cartopy" title="Permalink to this headline">¶</a></h1>
|
||||||
<p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Grids_and_Cartopy.ipynb">Notebook</a>
|
<p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Grids_and_Cartopy.ipynb">Notebook</a>
|
||||||
A simple example of requesting and plotting AWIPS grids with Matplotlib
|
Python-AWIPS Tutorial Notebook</p>
|
||||||
and Cartopy.</p>
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="objectives">
|
||||||
|
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this headline">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Create a colorized plot for the continental US of model data (grib).</p></li>
|
||||||
|
<li><p>Access the model data from an EDEX server and limit the data returned
|
||||||
|
by using model specific parameters.</p></li>
|
||||||
|
<li><p>Use both <em>pcolormesh</em> and <em>contourf</em> to create colorized plots, and
|
||||||
|
compare the differences between the two.</p></li>
|
||||||
|
</ul>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="table-of-contents">
|
||||||
|
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline">¶</a></h3>
|
||||||
|
<div class="line-block">
|
||||||
|
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#imports">1
|
||||||
|
Imports</a></div>
|
||||||
|
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#define-data-request">2 Define Data
|
||||||
|
Request</a></div>
|
||||||
|
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#limit-results-based-on-time">3 Limit Results Based on
|
||||||
|
Time</a></div>
|
||||||
|
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#function-make-map">4 Function:
|
||||||
|
make_map()</a></div>
|
||||||
|
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#use-the-grid-data">5 Use the Grid
|
||||||
|
Data!</a></div>
|
||||||
|
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#plot-using-pcolormesh">5.1 Plot Using
|
||||||
|
pcolormesh</a></div>
|
||||||
|
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#plot-using-contourf">5.2 Plot Using
|
||||||
|
contourf</a></div>
|
||||||
|
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#see-also">6 See
|
||||||
|
Also</a></div>
|
||||||
|
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#related-notebooks">6.1 Related
|
||||||
|
Notebooks</a></div>
|
||||||
|
<div class="line"> <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html#additional-documentation">6.2 Additional
|
||||||
|
Documentation</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="imports">
|
||||||
|
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this headline">¶</a></h3>
|
||||||
|
<p>Start by importing both the python-awips specific library, as well as
|
||||||
|
the libraries needed for plotting and manipulating the data</p>
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span>
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span>
|
||||||
<span class="kn">import</span> <span class="nn">cartopy.crs</span> <span class="k">as</span> <span class="nn">ccrs</span>
|
<span class="kn">import</span> <span class="nn">cartopy.crs</span> <span class="k">as</span> <span class="nn">ccrs</span>
|
||||||
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
|
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
|
||||||
<span class="kn">from</span> <span class="nn">cartopy.mpl.gridliner</span> <span class="kn">import</span> <span class="n">LONGITUDE_FORMATTER</span><span class="p">,</span> <span class="n">LATITUDE_FORMATTER</span>
|
<span class="kn">from</span> <span class="nn">cartopy.mpl.gridliner</span> <span class="kn">import</span> <span class="n">LONGITUDE_FORMATTER</span><span class="p">,</span> <span class="n">LATITUDE_FORMATTER</span>
|
||||||
<span class="o">%</span><span class="k">matplotlib</span> inline
|
<span class="kn">from</span> <span class="nn">scipy.constants</span> <span class="kn">import</span> <span class="n">convert_temperature</span>
|
||||||
|
</pre></div>
|
||||||
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="s2">"edex-cloud.unidata.ucar.edu"</span><span class="p">)</span>
|
</div>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html">Top</a></p>
|
||||||
|
</div>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="define-data-request">
|
||||||
|
<h3>2 Define Data Request<a class="headerlink" href="#define-data-request" title="Permalink to this headline">¶</a></h3>
|
||||||
|
<p>If you read through the <a class="reference external" href="https://nbviewer.jupyter.org/github/Unidata/pyaos-ams-2021/blob/master/notebooks/dataAccess/python-awips-HowToAccessData.ipynb">python-awips: How to Access
|
||||||
|
Data</a>
|
||||||
|
training, you will know that we need to set an EDEX url to access our
|
||||||
|
server, and then we create a data request. In this example we use <em>grid</em>
|
||||||
|
as the data type to define our request. In addition to setting the data
|
||||||
|
type, the location, parameters and levels are also set as <strong>RAP13</strong>,
|
||||||
|
<strong>T</strong> (for temperature), and <strong>2.0FHAG</strong> (for Fixed Height Above Ground
|
||||||
|
in meters), respectively.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="s2">"edex-cloud.unidata.ucar.edu"</span><span class="p">)</span>
|
||||||
<span class="n">request</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">()</span>
|
<span class="n">request</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">()</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setDatatype</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">setDatatype</span><span class="p">(</span><span class="s2">"grid"</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s2">"RAP13"</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="s2">"RAP13"</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s2">"T"</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="s2">"T"</span><span class="p">)</span>
|
||||||
<span class="n">request</span><span class="o">.</span><span class="n">setLevels</span><span class="p">(</span><span class="s2">"2.0FHAG"</span><span class="p">)</span>
|
<span class="n">request</span><span class="o">.</span><span class="n">setLevels</span><span class="p">(</span><span class="s2">"2.0FHAG"</span><span class="p">)</span>
|
||||||
<span class="n">cycles</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
|
||||||
|
<span class="c1"># Take a look at our request</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">DefaultDataRequest</span><span class="p">(</span><span class="n">datatype</span><span class="o">=</span><span class="n">grid</span><span class="p">,</span> <span class="n">identifiers</span><span class="o">=</span><span class="p">{},</span> <span class="n">parameters</span><span class="o">=</span><span class="p">[</span><span class="s1">'T'</span><span class="p">],</span> <span class="n">levels</span><span class="o">=</span><span class="p">[</span><span class="o"><</span><span class="n">dynamicserialize</span><span class="o">.</span><span class="n">dstypes</span><span class="o">.</span><span class="n">com</span><span class="o">.</span><span class="n">raytheon</span><span class="o">.</span><span class="n">uf</span><span class="o">.</span><span class="n">common</span><span class="o">.</span><span class="n">dataplugin</span><span class="o">.</span><span class="n">level</span><span class="o">.</span><span class="n">Level</span><span class="o">.</span><span class="n">Level</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x11127bfd0</span><span class="o">></span><span class="p">],</span> <span class="n">locationNames</span><span class="o">=</span><span class="p">[</span><span class="s1">'RAP13'</span><span class="p">],</span> <span class="n">envelope</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html">Top</a></p>
|
||||||
|
</div>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="limit-results-based-on-time">
|
||||||
|
<h3>3 Limit Results Based on Time<a class="headerlink" href="#limit-results-based-on-time" title="Permalink to this headline">¶</a></h3>
|
||||||
|
<p>Models produce many different time variants during their runs, so let’s
|
||||||
|
limit the data to the most recent time and forecast run.</p>
|
||||||
|
<div class="alert-info docutils container">
|
||||||
|
<p>Note: You can play around with different times and forecast runs to
|
||||||
|
see the differences.</p>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">cycles</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||||
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
|
||||||
<span class="n">fcstRun</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
|
<span class="n">fcstRun</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
|
||||||
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGridData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
|
|
||||||
<span class="n">grid</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
||||||
<span class="n">data</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">getRawData</span><span class="p">()</span>
|
|
||||||
<span class="n">lons</span><span class="p">,</span> <span class="n">lats</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">getLatLonCoords</span><span class="p">()</span>
|
|
||||||
<span class="n">bbox</span> <span class="o">=</span> <span class="p">[</span><span class="n">lons</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">lons</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="n">lats</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">lats</span><span class="o">.</span><span class="n">max</span><span class="p">()]</span>
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">()):</span>
|
<span class="c1"># Get the most recent grid data</span>
|
||||||
|
<span class="n">response</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getGridData</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'Number of available times:'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">times</span><span class="p">))</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'Number of available forecast runs:'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">fcstRun</span><span class="p">))</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Number</span> <span class="n">of</span> <span class="n">available</span> <span class="n">times</span><span class="p">:</span> <span class="mi">74</span>
|
||||||
|
<span class="n">Number</span> <span class="n">of</span> <span class="n">available</span> <span class="n">forecast</span> <span class="n">runs</span><span class="p">:</span> <span class="mi">8</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html">Top</a></p>
|
||||||
|
</div>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="function-make-map">
|
||||||
|
<h3>4 Function: make_map()<a class="headerlink" href="#function-make-map" title="Permalink to this headline">¶</a></h3>
|
||||||
|
<p>In order to plot more than one image, it’s easiest to define common
|
||||||
|
logic in a function. Here, a new function called <strong>make_map</strong> is
|
||||||
|
defined. This function uses the <a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html">matplotlib.pyplot package
|
||||||
|
(plt)</a>
|
||||||
|
to create a figure and axis. The coastlines (continental boundaries) are
|
||||||
|
added, along with lat/lon grids.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="n">ccrs</span><span class="o">.</span><span class="n">PlateCarree</span><span class="p">()):</span>
|
||||||
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span>
|
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span>
|
||||||
<span class="n">subplot_kw</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="n">projection</span><span class="p">))</span>
|
<span class="n">subplot_kw</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="n">projection</span><span class="p">))</span>
|
||||||
<span class="n">ax</span><span class="o">.</span><span class="n">set_extent</span><span class="p">(</span><span class="n">bbox</span><span class="p">)</span>
|
<span class="n">ax</span><span class="o">.</span><span class="n">set_extent</span><span class="p">(</span><span class="n">bbox</span><span class="p">)</span>
|
||||||
|
@ -226,31 +324,101 @@ and Cartopy.</p>
|
||||||
<span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span>
|
<span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="with-pcolormesh">
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html">Top</a></p>
|
||||||
<h2>with pcolormesh<a class="headerlink" href="#with-pcolormesh" title="Permalink to this headline">¶</a></h2>
|
</div>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="use-the-grid-data">
|
||||||
|
<h3>5 Use the Grid Data!<a class="headerlink" href="#use-the-grid-data" title="Permalink to this headline">¶</a></h3>
|
||||||
|
<p>Here we get our grid data object from our previous response, and then
|
||||||
|
get the raw data array off that object. We also get the latitude and
|
||||||
|
longitude arrays, and create a bounding box that we’ll use when creating
|
||||||
|
our plots (by calling <strong>make_map</strong> defined above). Finally, we’ll
|
||||||
|
convert our data from degrees Kelvin to Farenheit to make the plot more
|
||||||
|
understandable.</p>
|
||||||
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">grid</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="n">data</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">getRawData</span><span class="p">()</span>
|
||||||
|
<span class="n">lons</span><span class="p">,</span> <span class="n">lats</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">getLatLonCoords</span><span class="p">()</span>
|
||||||
|
<span class="n">bbox</span> <span class="o">=</span> <span class="p">[</span><span class="n">lons</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">lons</span><span class="o">.</span><span class="n">max</span><span class="p">(),</span> <span class="n">lats</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">lats</span><span class="o">.</span><span class="n">max</span><span class="p">()]</span>
|
||||||
|
|
||||||
|
<span class="c1"># Convert temp from Kelvin to F</span>
|
||||||
|
<span class="n">destUnit</span> <span class="o">=</span> <span class="s1">'F'</span>
|
||||||
|
<span class="n">data</span> <span class="o">=</span> <span class="n">convert_temperature</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="s1">'K'</span><span class="p">,</span> <span class="n">destUnit</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="plot-using-pcolormesh">
|
||||||
|
<h4>5.1 Plot Using pcolormesh<a class="headerlink" href="#plot-using-pcolormesh" title="Permalink to this headline">¶</a></h4>
|
||||||
|
<p>This example shows how to use
|
||||||
|
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.pcolormesh.html">matplotlib.pyplot.pcolormesh</a>
|
||||||
|
to create a colorized plot. We use our <strong>make_map</strong> function to create a
|
||||||
|
subplot and then we create a color scale (cs) and colorbar (cbar) with a
|
||||||
|
label for our plot.</p>
|
||||||
|
<div class="alert-info docutils container">
|
||||||
|
<p>Note: You may see a warning appear with a red background, this is
|
||||||
|
okay, and will go away with subsequent runs of the cell.</p>
|
||||||
|
</div>
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">cmap</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">get_cmap</span><span class="p">(</span><span class="s1">'rainbow'</span><span class="p">)</span>
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">cmap</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">get_cmap</span><span class="p">(</span><span class="s1">'rainbow'</span><span class="p">)</span>
|
||||||
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span>
|
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span>
|
||||||
<span class="n">cs</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span><span class="n">lons</span><span class="p">,</span> <span class="n">lats</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">)</span>
|
<span class="n">cs</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">pcolormesh</span><span class="p">(</span><span class="n">lons</span><span class="p">,</span> <span class="n">lats</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">)</span>
|
||||||
<span class="n">cbar</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">cs</span><span class="p">,</span> <span class="n">shrink</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s1">'horizontal'</span><span class="p">)</span>
|
<span class="n">cbar</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">cs</span><span class="p">,</span> <span class="n">shrink</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s1">'horizontal'</span><span class="p">)</span>
|
||||||
<span class="n">cbar</span><span class="o">.</span><span class="n">set_label</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getLocationName</span><span class="p">()</span> <span class="o">+</span><span class="s2">" "</span><span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getLevel</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" "</span> \
|
<span class="n">cbar</span><span class="o">.</span><span class="n">set_label</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getLocationName</span><span class="p">()</span> <span class="o">+</span><span class="s2">" "</span><span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getLevel</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" "</span> \
|
||||||
<span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getParameter</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getUnit</span><span class="p">()</span> <span class="o">+</span> <span class="s2">") "</span> \
|
<span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getParameter</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="n">destUnit</span> <span class="o">+</span> <span class="s2">") "</span> \
|
||||||
<span class="o">+</span> <span class="s2">"valid "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getDataTime</span><span class="p">()</span><span class="o">.</span><span class="n">getRefTime</span><span class="p">()))</span>
|
<span class="o">+</span> <span class="s2">"valid "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getDataTime</span><span class="p">()</span><span class="o">.</span><span class="n">getRefTime</span><span class="p">()))</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<img alt="../../_images/Grids_and_Cartopy_3_0.png" src="../../_images/Grids_and_Cartopy_3_0.png" />
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">Users</span><span class="o">/</span><span class="n">scarter</span><span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">miniconda3</span><span class="o">/</span><span class="n">envs</span><span class="o">/</span><span class="n">python3</span><span class="o">-</span><span class="n">awips</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">python3</span><span class="mf">.9</span><span class="o">/</span><span class="n">site</span><span class="o">-</span><span class="n">packages</span><span class="o">/</span><span class="n">cartopy</span><span class="o">/</span><span class="n">mpl</span><span class="o">/</span><span class="n">geoaxes</span><span class="o">.</span><span class="n">py</span><span class="p">:</span><span class="mi">1598</span><span class="p">:</span> <span class="ne">UserWarning</span><span class="p">:</span> <span class="n">The</span> <span class="nb">input</span> <span class="n">coordinates</span> <span class="n">to</span> <span class="n">pcolormesh</span> <span class="n">are</span> <span class="n">interpreted</span> <span class="k">as</span> <span class="n">cell</span> <span class="n">centers</span><span class="p">,</span> <span class="n">but</span> <span class="n">are</span> <span class="ow">not</span> <span class="n">monotonically</span> <span class="n">increasing</span> <span class="ow">or</span> <span class="n">decreasing</span><span class="o">.</span> <span class="n">This</span> <span class="n">may</span> <span class="n">lead</span> <span class="n">to</span> <span class="n">incorrectly</span> <span class="n">calculated</span> <span class="n">cell</span> <span class="n">edges</span><span class="p">,</span> <span class="ow">in</span> <span class="n">which</span> <span class="n">case</span><span class="p">,</span> <span class="n">please</span> <span class="n">supply</span> <span class="n">explicit</span> <span class="n">cell</span> <span class="n">edges</span> <span class="n">to</span> <span class="n">pcolormesh</span><span class="o">.</span>
|
||||||
|
<span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">C</span><span class="p">,</span> <span class="n">shading</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pcolorargs</span><span class="p">(</span><span class="s1">'pcolormesh'</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span>
|
||||||
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="with-contourf">
|
<img alt="../../_images/Grids_and_Cartopy_21_1.png" src="../../_images/Grids_and_Cartopy_21_1.png" />
|
||||||
<h2>with contourf<a class="headerlink" href="#with-contourf" title="Permalink to this headline">¶</a></h2>
|
</div>
|
||||||
|
<div class="section" id="plot-using-contourf">
|
||||||
|
<h4>5.2 Plot Using contourf<a class="headerlink" href="#plot-using-contourf" title="Permalink to this headline">¶</a></h4>
|
||||||
|
<p>This example shows how to use
|
||||||
|
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.contourf.html">matplotlib.pyplot.contourf</a>
|
||||||
|
to create a colorized plot. We use our <strong>make_map</strong> function to create a
|
||||||
|
subplot and then we create a color scale (cs2) and colorbar (cbar2) with
|
||||||
|
a label for our plot.</p>
|
||||||
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">fig2</span><span class="p">,</span> <span class="n">ax2</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span>
|
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">fig2</span><span class="p">,</span> <span class="n">ax2</span> <span class="o">=</span> <span class="n">make_map</span><span class="p">(</span><span class="n">bbox</span><span class="o">=</span><span class="n">bbox</span><span class="p">)</span>
|
||||||
<span class="n">cs2</span> <span class="o">=</span> <span class="n">ax2</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">lons</span><span class="p">,</span> <span class="n">lats</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="mi">80</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">,</span>
|
<span class="n">cs2</span> <span class="o">=</span> <span class="n">ax2</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">lons</span><span class="p">,</span> <span class="n">lats</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="mi">80</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">,</span>
|
||||||
<span class="n">vmin</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">vmax</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>
|
<span class="n">vmin</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">vmax</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>
|
||||||
<span class="n">cbar2</span> <span class="o">=</span> <span class="n">fig2</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">cs2</span><span class="p">,</span> <span class="n">shrink</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s1">'horizontal'</span><span class="p">)</span>
|
<span class="n">cbar2</span> <span class="o">=</span> <span class="n">fig2</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">cs2</span><span class="p">,</span> <span class="n">shrink</span><span class="o">=</span><span class="mf">0.7</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s1">'horizontal'</span><span class="p">)</span>
|
||||||
<span class="n">cbar2</span><span class="o">.</span><span class="n">set_label</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getLocationName</span><span class="p">()</span> <span class="o">+</span><span class="s2">" "</span><span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getLevel</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" "</span> \
|
<span class="n">cbar2</span><span class="o">.</span><span class="n">set_label</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getLocationName</span><span class="p">()</span> <span class="o">+</span><span class="s2">" "</span><span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getLevel</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" "</span> \
|
||||||
<span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getParameter</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getUnit</span><span class="p">()</span><span class="o">+</span> <span class="s2">") "</span> \
|
<span class="o">+</span> <span class="n">grid</span><span class="o">.</span><span class="n">getParameter</span><span class="p">()</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="n">destUnit</span> <span class="o">+</span> <span class="s2">") "</span> \
|
||||||
<span class="o">+</span> <span class="s2">"valid "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getDataTime</span><span class="p">()</span><span class="o">.</span><span class="n">getRefTime</span><span class="p">()))</span>
|
<span class="o">+</span> <span class="s2">"valid "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">grid</span><span class="o">.</span><span class="n">getDataTime</span><span class="p">()</span><span class="o">.</span><span class="n">getRefTime</span><span class="p">()))</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<img alt="../../_images/Grids_and_Cartopy_5_0.png" src="../../_images/Grids_and_Cartopy_5_0.png" />
|
<img alt="../../_images/Grids_and_Cartopy_23_0.png" src="../../_images/Grids_and_Cartopy_23_0.png" />
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html">Top</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr class="docutils" />
|
||||||
|
<div class="section" id="see-also">
|
||||||
|
<h3>6 See Also<a class="headerlink" href="#see-also" title="Permalink to this headline">¶</a></h3>
|
||||||
|
<div class="section" id="related-notebooks">
|
||||||
|
<h4>6.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this headline">¶</a></h4>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html">Grid Levels and
|
||||||
|
Parameters</a></p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="additional-documention">
|
||||||
|
<h4>6.2 Additional Documention<a class="headerlink" href="#additional-documention" title="Permalink to this headline">¶</a></h4>
|
||||||
|
<p><strong>python-awips:</strong> *
|
||||||
|
<a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html">awips.DataAccessLayer</a>
|
||||||
|
*
|
||||||
|
<a class="reference external" href="http://unidata.github.io/python-awips/api/PyGridData.html">awips.PyGridData</a></p>
|
||||||
|
<p><strong>matplotlib:</strong> *
|
||||||
|
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html">matplotlib.pyplot</a>
|
||||||
|
*
|
||||||
|
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.subplot.html">matplotlib.pyplot.subplot</a>
|
||||||
|
*
|
||||||
|
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.pcolormesh.html">matplotlib.pyplot.pcolormesh</a>
|
||||||
|
*
|
||||||
|
<a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.contourf.html">matplotlib.pyplot.contourf</a></p>
|
||||||
|
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grids_and_Cartopy.html">Top</a></p>
|
||||||
|
<hr class="docutils" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
BIN
objects.inv
BIN
objects.inv
Binary file not shown.
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue