Trajectory Analysis (TrajAn)
TrajAn is a Python package with functionality to handle trajectory datasets following the CF-conventions on trajectories.
Trajectory datasets contain position time series from e.g. drifting buoys, or output from lagrangian models.
Installation
$ conda install -c conda-forge trajan
or
$ pip install trajan
Usage
_TrajAn_ is an Xarry extension. On drifter (or trajectory) datasets you can use the .traj accessor on xarray.Dataset s. In order to register the accessor _trajan_ needs to be imported:
import matplotlib.pyplot as plt
import xarray as xr
import trajan as _
ds = xr.open_dataset('drifter_dataset.nc')
ds.traj.plot()
plt.show()
speed = ds.traj.speed()
print(f'Max speed {speed.max().values} m/s')
Trajectory datasets from different models and observations tend to have many small differences. TrajAn expects the dataset to be CF-compliant. However, the standard does leave some room for interpretation.
Generally, TrajAn supports two types of data layout: 1) trajectories sampled at different times (unstructured or irregular grid, almost every dataset from real observations. And 2) trajectories sampled at uniform (or a regular grid, typical the output from a model). We often refer to the first type as _2D_ since time is a function of trajectory and observation, while the second type is _1D_ and time is only a function of observation. __TrajAn__ will detect which type of dataset you have and you will have access to the appropriate methods for the type data layout.
While the first type (_2D_) is more general it often limits analysis that require trajectories to be sampled at the same points, you can therefor convert a _2D_ dataset to _1D_ by using trajan.traj2d.Traj2d.gridtime()
.
Methods applicable to both types of datasets can be found in: trajan.traj
, methods for _1D_ datasets: trajan.traj.traj1d
, and _2D_: trajan.traj.traj2d
. All methods are forwarded to the accessor, so you call the methods on Dataset.traj:
ds = ds.traj.gridtime('1H') # grid dataset to every hour (a 2D method)
ds.traj.plot() # plot dataset
Generic plotting is available in the standard Xarray way, and strives to stay as close to matplotlib as possible: (trajan.trajectory_accessor.TrajAccessor.plot()
) and animation (trajan.trajectory_accessor.TrajAccessor.animate()
).