From 8d358c0d2d3236bedc0d0e6c4ee63898080822b1 Mon Sep 17 00:00:00 2001 From: ukmo-huw-lewis Date: Fri, 21 Aug 2026 12:01:17 +0100 Subject: [PATCH 1/5] New docs gallery timeseries example --- .../gallery/examples/line/GALLERY_HEADER.rst | 2 + .../examples/line/plot_line_timeseries.py | 65 ++++++++++++++++++ .../sample_data/air_temperature_fcst_1.nc | Bin 0 -> 18178 bytes .../sample_data/air_temperature_fcst_2.nc | Bin 0 -> 22534 bytes 4 files changed, 67 insertions(+) create mode 100644 docs/source/reference/gallery/examples/line/GALLERY_HEADER.rst create mode 100644 docs/source/reference/gallery/examples/line/plot_line_timeseries.py create mode 100644 src/CSET/sample_data/air_temperature_fcst_1.nc create mode 100644 src/CSET/sample_data/air_temperature_fcst_2.nc diff --git a/docs/source/reference/gallery/examples/line/GALLERY_HEADER.rst b/docs/source/reference/gallery/examples/line/GALLERY_HEADER.rst new file mode 100644 index 000000000..adf495759 --- /dev/null +++ b/docs/source/reference/gallery/examples/line/GALLERY_HEADER.rst @@ -0,0 +1,2 @@ +Line plots +========== diff --git a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py new file mode 100644 index 000000000..5720907dc --- /dev/null +++ b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py @@ -0,0 +1,65 @@ +""" +Time series plot +================ + +Generate time series of region-averaged field. + +.. admonition:: References + + General functionality is provided using :doc:`CSET recipe ` ``generic_surface_domain_mean_time_series.yaml`` + + The following CSET operators are used: + + * :py:mod:`CSET.operators.read.read_cubes` + * :py:mod:`CSET.operators.plot.plot_line_series`. + +Using *cset bake* on the command line +------------------------------------- + +* Access recipe file using ``cset cookbook``. +* Set required recipe inputs on command line. + +Example to generate full-domain spatial maps of ``temperature_at_screen_level`` for all output times:: + + cset cookbook generic_surface_domain_mean_time_series.yaml + cset -v bake -i "/path/to/input/data" ["/path/to/input/data2" "..."] + -o "./output_path" \\ + -r generic_surface_domain_mean_time_series.yaml \\ + --VARNAME="temperature_at_screen_level" \\ + --MODEL_NAME="my_model_label" ["my_model_label2" "..."] \\ + --METHOD="SEQ" \\ + --SUBAREA_TYPE='None' --SUBAREA_EXTENT='None' --SUBAREA_NAME='None' + +Configuring the *cset_workflow* +------------------------------- + +* Update workflow configuration settings via ``rose edit`` GUI or in ``rose-suite.conf`` file. +* Complete ``General setup options`` and ``Cycling and Model options`` details - see :doc:`/usage/workflow-configure`. +* Set required configuration options on ``Diagnostics / Surface (2D) fields`` panel:: + + SURFACE_FIELDS = ["temperature_at_screen_level", ...] + TIMESERIES_SURFACE_FIELD = True + +Example python code +------------------- +""" + +from CSET import sample_data_path +from CSET.operators import collapse, plot, read + +# Set paths to input data +filename1 = sample_data_path("air_temperature_fcst_1.nc") +filename2 = sample_data_path("air_temperature_fcst_2.nc") + +# Read selected variable(s) of interest for 2 models +cubes = read.read_cubes( + [filename1, filename2], + ["temperature_at_screen_level"], + model_names=["model_fcst_1", "model_fcst_2"], +) + +# Collapse input data over selected dimensions +collapsed_cubes = collapse.collapse(cubes, ["grid_latitude", "grid_longitude"], "MEAN") + +# Plot domain mean time series using plot_line_series +plot.plot_line_series(collapsed_cubes) diff --git a/src/CSET/sample_data/air_temperature_fcst_1.nc b/src/CSET/sample_data/air_temperature_fcst_1.nc new file mode 100644 index 0000000000000000000000000000000000000000..c77def86854052a744afba7b4b020519290f756b GIT binary patch literal 18178 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 literal 0 HcmV?d00001 From e8aeef6df5e1fde143e43f19987859f8b251a25e Mon Sep 17 00:00:00 2001 From: ukmo-huw-lewis Date: Fri, 21 Aug 2026 12:09:30 +0100 Subject: [PATCH 2/5] Add missing operator dependency --- .../reference/gallery/examples/line/plot_line_timeseries.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py index 5720907dc..214e32791 100644 --- a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py +++ b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py @@ -11,6 +11,7 @@ The following CSET operators are used: * :py:mod:`CSET.operators.read.read_cubes` + * :py:mod:`CSET.operators.collapse.collapse`: * :py:mod:`CSET.operators.plot.plot_line_series`. Using *cset bake* on the command line From 1958d891eb8491809270e3640b135f2ebe00b29c Mon Sep 17 00:00:00 2001 From: ukmo-huw-lewis Date: Fri, 21 Aug 2026 12:10:28 +0100 Subject: [PATCH 3/5] Fix typo --- .../reference/gallery/examples/line/plot_line_timeseries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py index 214e32791..e3043e738 100644 --- a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py +++ b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py @@ -11,7 +11,7 @@ The following CSET operators are used: * :py:mod:`CSET.operators.read.read_cubes` - * :py:mod:`CSET.operators.collapse.collapse`: + * :py:mod:`CSET.operators.collapse.collapse` * :py:mod:`CSET.operators.plot.plot_line_series`. Using *cset bake* on the command line From afabdb30d6e41ad2d704216f17752388bb75f2d6 Mon Sep 17 00:00:00 2001 From: ukmo-huw-lewis Date: Fri, 21 Aug 2026 12:13:02 +0100 Subject: [PATCH 4/5] Typo --- .../reference/gallery/examples/line/plot_line_timeseries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py index e3043e738..884b81da5 100644 --- a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py +++ b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py @@ -20,7 +20,7 @@ * Access recipe file using ``cset cookbook``. * Set required recipe inputs on command line. -Example to generate full-domain spatial maps of ``temperature_at_screen_level`` for all output times:: +Example to generate time series plot of domain averaged ``temperature_at_screen_level`` for all models:: cset cookbook generic_surface_domain_mean_time_series.yaml cset -v bake -i "/path/to/input/data" ["/path/to/input/data2" "..."] From 90f90de215163813e1c4541e7c7dba281fd039ad Mon Sep 17 00:00:00 2001 From: ukmo-huw-lewis Date: Fri, 21 Aug 2026 14:32:12 +0100 Subject: [PATCH 5/5] Response to review comments --- .../gallery/examples/line/plot_line_timeseries.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py index 884b81da5..e1ae52c10 100644 --- a/docs/source/reference/gallery/examples/line/plot_line_timeseries.py +++ b/docs/source/reference/gallery/examples/line/plot_line_timeseries.py @@ -20,16 +20,16 @@ * Access recipe file using ``cset cookbook``. * Set required recipe inputs on command line. -Example to generate time series plot of domain averaged ``temperature_at_screen_level`` for all models:: +Example to generate time series plot of domain averaged ``temperature_at_screen_level`` for any number of input models:: cset cookbook generic_surface_domain_mean_time_series.yaml - cset -v bake -i "/path/to/input/data" ["/path/to/input/data2" "..."] + cset -v bake -i "/path/to/input/data1" "..." "/path/to/input/dataN" \\ -o "./output_path" \\ -r generic_surface_domain_mean_time_series.yaml \\ --VARNAME="temperature_at_screen_level" \\ - --MODEL_NAME="my_model_label" ["my_model_label2" "..."] \\ + --MODEL_NAME="['my_model_label1' '...' 'my_model_labelN']" \\ --METHOD="SEQ" \\ - --SUBAREA_TYPE='None' --SUBAREA_EXTENT='None' --SUBAREA_NAME='None' + --SUBAREA_TYPE='None' --SUBAREA_EXTENT='None' --SUBAREA_NAME='' Configuring the *cset_workflow* -------------------------------