Skip to content

cinei.visualization

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