Plot a single emission variable from a CINEI NetCDF file.
Parameters
file_path : str
Path to the NetCDF file.
variable : str, optional
Variable to plot. Default: 'sum'.
cmap : str, optional
Matplotlib colormap. Default: 'viridis'.
figsize : tuple, optional
Figure size. Default: (12, 8).
title : str, optional
Plot title. Auto-generated if None.
save_path : str, optional
Path to save figure. If None, figure is displayed.
Returns
matplotlib.figure.Figure
Examples
import cinei
fig = cinei.plot_emission_map(
... '/data/output/CINEI_2017_Jan_NMVOC_0p25deg_China.nc',
... variable='sum'
... )
Source code in cinei/visualization.py
| def plot_emission_map(file_path, variable='sum', cmap='viridis',
figsize=(12, 8), title=None, save_path=None):
"""
Plot a single emission variable from a CINEI NetCDF file.
Parameters
----------
file_path : str
Path to the NetCDF file.
variable : str, optional
Variable to plot. Default: 'sum'.
cmap : str, optional
Matplotlib colormap. Default: 'viridis'.
figsize : tuple, optional
Figure size. Default: (12, 8).
title : str, optional
Plot title. Auto-generated if None.
save_path : str, optional
Path to save figure. If None, figure is displayed.
Returns
-------
matplotlib.figure.Figure
Examples
--------
>>> import cinei
>>> fig = cinei.plot_emission_map(
... '/data/output/CINEI_2017_Jan_NMVOC_0p25deg_China.nc',
... variable='sum'
... )
"""
ds = xr.open_dataset(file_path)
if variable not in ds.data_vars:
raise ValueError(
f"[CINEI] Variable '{variable}' not found.\n"
f" Available: {list(ds.data_vars)}"
)
if title is None:
title = f"Emission map: {variable} — {file_path.split('/')[-1]}"
fig, ax = plt.subplots(figsize=figsize)
data = ds[variable].values.copy()
data = np.ma.masked_where(data <= 0, data)
im = ax.pcolormesh(ds.lon, ds.lat, data, cmap=cmap, shading='auto')
cbar = plt.colorbar(im, ax=ax)
cbar.set_label(ds.attrs.get('unit', 'Emission'))
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.set_title(title)
ax.grid(True, linestyle='--', alpha=0.5)
lon_range = ds.lon.values
lat_range = ds.lat.values
ax.set_xlim(lon_range.min(), lon_range.max())
ax.set_ylim(lat_range.min(), lat_range.max())
plt.tight_layout()
if save_path is not None:
plt.savefig(save_path, dpi=300, bbox_inches='tight')
print(f"[CINEI] Plot saved: {save_path}")
ds.close()
return fig
|