Tutorial¶
This tutorial demonstrates common workflows in MONET, including data loading, regridding, plotting, statistics, and how to use the MONET accessors.
Step-by-Step Tutorial: Using MONET with Xarray Toy Datasets¶
Xarray provides built-in toy datasets perfect for experimenting with MONET.
import monet
import xarray as xr
# Load a toy dataset
ds = xr.tutorial.load_dataset('air_temperature')
# Use MONET accessors for quick visualization
ds['air'].isel(time=1).monet.quick_map()
# Find the nearest point to a location
nearest = ds['air'].monet.nearest_latlon(lat=40.0, lon=-100.0)
# Regrid to a coarser grid (for demonstration)
coarse = ds['air'].coarsen(time=1, lat=2, lon=2, boundary='trim').mean()
regridded = ds['air'].monet.remap(coarse, method='bilinear')
# Calculate statistics
from monet.util import stats
rmse = stats.RMSE(ds['air'], regridded)
print(f"RMSE: {rmse.values}")
MONET Accessor Overview¶
MONET adds tools to xarray and pandas through accessors. These are accessed via the .monet attribute after import monet.
Initializing the Accessor¶
import monet
import xarray as xr
import pandas as pd
ds = xr.open_dataset('model_output.nc')
df = pd.read_csv('obs_points.csv')
Key Accessor Features¶
- Plotting:
quick_map,quick_imshow,quick_contourf,quick_facet_time_map,plot_points_map,plot_lines_map - Regridding/Interpolation:
remap(via xregrid),remap_nearest,interp_constant_lat,interp_constant_lon,interpolate_vertical - Geospatial utilities:
nearest_latlon,window,is_land,is_ocean,wrap_longitudes,tidy,structure_for_monet - Combining data:
combine_point,combine_point_esmf,combine_da_to_df
Common Workflows¶
1. Loading Data¶
import monet
import xarray as xr
import pandas as pd
ds = xr.open_dataset('model_output.nc')
df = pd.read_csv('obs_points.csv')
2. Regridding and Interpolation¶
# Regrid model to obs grid using ESMF (via xregrid)
regridded = ds.monet.remap(obs, method='bilinear')
# Nearest neighbor regridding
regridded_nn = ds.monet.remap(obs, method='nearest')
# Interpolate to a constant latitude or longitude
lat_slice = ds['O3'].monet.interp_constant_lat(lat=40.0)
# Interpolate O3 to pressure levels using pytspack tension splines
interped = ds['O3'].monet.interpolate_vertical([850, 700, 500], level_dim='level')
3. Quick Map and Faceted Plots¶
# Quick map for a single time
ds['O3'].isel(time=0).monet.quick_map()
# Faceted map by time
ds['O3'].monet.quick_facet_time_map(time_dim='time', ncols=4)
4. Taylor Diagram¶
import numpy as np
from monet.plots.taylordiagram import TaylorDiagram
ref = np.random.normal(0, 1, 100)
model = ref + np.random.normal(0, 0.5, 100)
fig = TaylorDiagram(ref.std())
fig.add_sample(model.std(), np.corrcoef(ref, model)[0, 1], marker='o', label='Model')