Temporal subsets of stratigraphyΒΆ

This example creates straigraphy for a temporal subset of the dataset. This allows for a view of time evolution of stratigraphy itself, for example, the changing stack of an experiment through time.

In this example, we make the subsets into a movie, but the relevant lines for creating a subset are:

vol, elev = spl.strat.compute_boxy_stratigraphy_volume(
    aeolian_eta[:i],
    aeolian_time[:i],
    z=zs,
    sigma_dist=subsidence_rate,
)

where the :i indicates the slice of all of the times to be used in the calculations. See compute_boxy_stratigraphy_volume.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

import sandplover as spl

# set up to use constant z for stratigraphy, so all frames line up over time
zs = np.arange(-10, 10, 0.25)

# load the sample data and define indices to use in the plotting
aeolian = spl.sample_data.aeolian()
time_idxs = np.arange(100, 300, step=10)

aeolian_eta = aeolian["eta"].copy()
aeolian_time = aeolian["time"].copy()

subsidence_rate = 0.01
cross_section_idx = 10


def update_field(i):
    vol, elev = spl.strat.compute_boxy_stratigraphy_volume(
        aeolian_eta[:i],
        aeolian_time[:i],
        z=zs,
        sigma_dist=subsidence_rate,
    )
    im.set_data(vol[:, :, cross_section_idx])


# make one strat for the initial, to have the full shape of the image
vol, elev = spl.strat.compute_boxy_stratigraphy_volume(
    aeolian_eta[: time_idxs[0]],
    aeolian_time[: time_idxs[0]],
    z=zs,
    sigma_dist=subsidence_rate,
)

# make the first frame
fig, ax = plt.subplots(figsize=(6, 3))
im = plt.imshow(
    vol[:, :, cross_section_idx],
    extent=[0, aeolian.dim1_coords[-1], elev.min(), elev.max()],
    aspect="auto",
    origin="lower",
    vmin=0,
    vmax=time_idxs[-1],
)

(Source code)

Then, make the animation.

import os

os.makedirs("../../../../build/plot_directive/guides/examples/plot/", exist_ok=True)

anim = animation.FuncAnimation(fig, update_field, frames=time_idxs, interval=5)
anim.save('../../../../build/plot_directive/guides/examples/plot/strat_movie.gif', fps=5)

anim = animation.FuncAnimation(
    fig, update_field,
    frames=time_idxs,
    interval=5,
    blit=False)
anim.save('../../../../build/plot_directive/guides/examples/plot/simple_movie.gif', fps=5)

plt.show()

(Source code)

anim = animation.FuncAnimation(fig, update_field, frames=time_idxs, interval=5)
anim.save("strat_movie.gif", fps=5)

plt.show()

And view the gif:

../../../_images/strat_movie.gif