diff --git a/docs/iris/example_code/Oceanography/load_nemo.py b/docs/iris/example_code/Oceanography/load_nemo.py new file mode 100644 index 0000000000..a76da68248 --- /dev/null +++ b/docs/iris/example_code/Oceanography/load_nemo.py @@ -0,0 +1,59 @@ +""" +Load a time series of data from the NEMO model +============================================== + +This example demonstrates how to load multiple files containing data output by +the NEMO model and combine them into a time series in a single cube. The +different time dimensions in these files can prevent Iris from concatenating +them without the intervention shown here. +""" +from __future__ import unicode_literals + +import iris +import iris.plot as iplt +import iris.quickplot as qplt +import matplotlib.pyplot as plt +from iris.util import promote_aux_coord_to_dim_coord + + +def main(): + # Load the three files of sample NEMO data. + fname = iris.sample_data_path('NEMO/nemo_1m_*.nc') + cubes = iris.load(fname) + + # Some attributes are unique to each file and must be blanked + # to allow concatenation. + differing_attrs = ['file_name', 'name', 'timeStamp', 'TimeStamp'] + for cube in cubes: + for attribute in differing_attrs: + cube.attributes[attribute] = '' + + # The cubes still cannot be concatenated because their time dimension is + # time_counter rather than time. time needs to be promoted to allow + # concatenation. + for cube in cubes: + promote_aux_coord_to_dim_coord(cube, 'time') + + # The cubes can now be concatenated into a single time series. + cube = cubes.concatenate_cube() + + # Generate a time series plot of a single point + plt.figure() + y_point_index = 100 + x_point_index = 100 + qplt.plot(cube[:, y_point_index, x_point_index], 'o-') + + # Include the point's position in the plot's title + lat_point = cube.coord('latitude').points[y_point_index, x_point_index] + lat_string = '{:.3f}\u00B0 {}'.format(abs(lat_point), + 'N' if lat_point > 0. else 'S') + lon_point = cube.coord('longitude').points[y_point_index, x_point_index] + lon_string = '{:.3f}\u00B0 {}'.format(abs(lon_point), + 'E' if lon_point > 0. else 'W') + plt.title('{} at {} {}'.format(cube.long_name.capitalize(), + lat_string, lon_string)) + iplt.show() + + +if __name__ == '__main__': + main() diff --git a/docs/iris/example_tests/test_load_nemo.py b/docs/iris/example_tests/test_load_nemo.py new file mode 100644 index 0000000000..13785609e2 --- /dev/null +++ b/docs/iris/example_tests/test_load_nemo.py @@ -0,0 +1,41 @@ +# (C) British Crown Copyright 2019, Met Office +# +# This file is part of Iris. +# +# Iris is free software: you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the +# Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Iris is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Iris. If not, see . + +from __future__ import (absolute_import, division, print_function) +from six.moves import (filter, input, map, range, zip) # noqa + +# Import Iris tests first so that some things can be initialised before +# importing anything else. +import iris.tests as tests + +from .extest_util import (add_examples_to_path, + show_replaced_by_check_graphic, + fail_any_deprecation_warnings) + + +class TestLoadNemo(tests.GraphicsTest): + """Test the load_nemo example code.""" + def test_load_nemo(self): + with fail_any_deprecation_warnings(): + with add_examples_to_path(): + import load_nemo + with show_replaced_by_check_graphic(self): + load_nemo.main() + + +if __name__ == '__main__': + tests.main() diff --git a/docs/iris/src/whatsnew/contributions_2.3.0/docchange_2019-Sep-13_nemo_gallery_example.txt b/docs/iris/src/whatsnew/contributions_2.3.0/docchange_2019-Sep-13_nemo_gallery_example.txt new file mode 100644 index 0000000000..593e28a79a --- /dev/null +++ b/docs/iris/src/whatsnew/contributions_2.3.0/docchange_2019-Sep-13_nemo_gallery_example.txt @@ -0,0 +1 @@ +Added a gallery example showing how to concatenate NEMO ocean model data. \ No newline at end of file diff --git a/lib/iris/tests/results/imagerepo.json b/lib/iris/tests/results/imagerepo.json index 540743366d..3a5f0ab17d 100644 --- a/lib/iris/tests/results/imagerepo.json +++ b/lib/iris/tests/results/imagerepo.json @@ -83,6 +83,9 @@ "https://scitools.github.io/test-iris-imagehash/images/v4/eae942146540b869961f8de694589da69543cc9af1014afbc3fd596b84fe19a7.png", "https://scitools.github.io/test-iris-imagehash/images/v4/eafd9e12a5a061e9925ec716de489e9685078ec981b229e70ddb79219cc3768d.png" ], + "example_tests.test_load_nemo.TestLoadNemo.test_load_nemo.0": [ + "https://scitools.github.io/test-iris-imagehash/images/v4/a3ff34e87f0049496d17c4d9c04fc225d256971392d39f1696df0f16cec00f36.png" + ], "example_tests.test_orca_projection.TestOrcaProjection.test_orca_projection.0": [ "https://scitools.github.io/test-iris-imagehash/images/v4/fb11731a94cea4ee64b35e91d1d2304e9e5ac7397b20e1fe12852487e666ce46.png", "https://scitools.github.io/test-iris-imagehash/images/v4/bb11721a87cce5e4cce79e81d19b3b5e1e1cd3783168e07835853485e65e2e1e.png"