.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/howto_plot/plot_timeslice.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_howto_plot_plot_timeslice.py: How to Create Time Slices ========================= .. sectionauthor:: Florian Zill (Helmholtz Centre for Environmental Research GmbH - UFZ) In this example we show how to create a filled contourplot of transient data over a sampling line. For this purpose we use a component transport example from the ogs benchmark gallery (https://www.opengeosys.org/docs/benchmarks/hydro-component/elder/). To see this benchmark results over all timesteps have a look at :ref:`sphx_glr_auto_examples_howto_plot_plot_animation.py`. .. GENERATED FROM PYTHON SOURCE LINES 17-18 Let's load the data which we want to investigate. .. GENERATED FROM PYTHON SOURCE LINES 20-31 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np import pyvista as pv import ogstools as ot from ogstools import examples mesh_series = examples.load_meshseries_CT_2D_XDMF().scale(time=("s", "a")) y = mesh_series[0].center[1] # flat y coordinate of this 2D mesh is not 0 si = ot.variables.saturation .. GENERATED FROM PYTHON SOURCE LINES 32-33 Now we setup two sampling lines. .. GENERATED FROM PYTHON SOURCE LINES 35-41 .. code-block:: Python pts_vert = np.linspace([25, y, -75], [25, y, 75], num=100) pts_diag = np.linspace([25, y, 75], [100, y, 0], num=100) fig = mesh_series.mesh(-1).plot_contourf(si, vmin=0) fig.axes[0].plot(pts_vert[:, 0], pts_vert[:, 2], "-k", linewidth=3) fig.axes[0].plot(pts_diag[:, 0], pts_diag[:, 2], "-.k", linewidth=3) .. image-sg:: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_001.png :alt: plot timeslice :srcset: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none [] .. GENERATED FROM PYTHON SOURCE LINES 42-44 Here, we first show a regular line sample plot for the vertical sampling line for each timestep. .. GENERATED FROM PYTHON SOURCE LINES 46-54 .. code-block:: Python fig, ax = plt.subplots(figsize=[15, 8]) for mesh, timevalue in zip(mesh_series, mesh_series.timevalues, strict=True): sample = pv.PolyData(pts_vert).sample(mesh) color = str(0.8 * timevalue / mesh_series.timevalues[-1]) label = f"{timevalue:.1f} a" fig = ot.plot.line( sample, si, "z", ax=ax, label=label, color=color, fontsize=20 ) .. image-sg:: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_002.png :alt: plot timeslice :srcset: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 55-60 As the above kind of plot is getting cluttered for lots of timesteps we provide a function to create a filled contour plot over the transient data. The function :meth:`~ogstools.meshlib.mesh_series.MeshSeries.plot_time_slice` automatically detects if the line lies on a cardinal direction and labels the y-axes with the changing spatial dimension. .. GENERATED FROM PYTHON SOURCE LINES 62-64 .. code-block:: Python fig = mesh_series.plot_time_slice(si, pts_vert) .. image-sg:: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_003.png :alt: plot timeslice :srcset: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 65-69 By default the plot is smoothened with interpolation. When deactivated, we see the edges of the raw sampled data. When using the interpolation, be sure to adjust the number of sampling points if the MeshSeries contains a lot of small timesteps. .. GENERATED FROM PYTHON SOURCE LINES 69-71 .. code-block:: Python fig = mesh_series.plot_time_slice(si, pts_vert, interpolate=False) .. image-sg:: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_004.png :alt: plot timeslice :srcset: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_004.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 72-76 If the line doesn't point in a cardinal direction the distance along the line is used for the y-axis by default. You can however, specify if you want to use spatial dimension via the argument "y_axis". This may be useful when plotting data of an edge / boundary of the mesh. .. GENERATED FROM PYTHON SOURCE LINES 76-77 .. code-block:: Python fig = mesh_series.plot_time_slice(si, pts_diag) .. image-sg:: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_005.png :alt: plot timeslice :srcset: /auto_examples/howto_plot/images/sphx_glr_plot_timeslice_005.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 1.597 seconds) .. _sphx_glr_download_auto_examples_howto_plot_plot_timeslice.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_timeslice.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_timeslice.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_timeslice.zip `