uclchem.plot.panels =================== .. py:module:: uclchem.plot.panels .. autoapi-nested-parse:: Atomic plot units — each function draws a single panel onto a provided axis. Module Contents --------------- Functions ~~~~~~~~~ .. autoapisummary:: uclchem.plot.panels.draw_panel_abundances uclchem.plot.panels.draw_panel_rate_constants uclchem.plot.panels.draw_panel_rates uclchem.plot.panels.plot_species .. py:function:: draw_panel_abundances(ax: matplotlib.pyplot.Axes, time: pandas.Series, species: str, chem: pandas.DataFrame, companion: list[str] | None = None, *, reactant_species: set[str] | None = None, color_registry: dict[str, str] | None = None) -> matplotlib.pyplot.Axes Draw species abundances onto *ax* (Panel A of a deepdive figure). The target *species* is drawn in black at full weight. Each entry in *companion* is drawn in a tab20 color; species that appear in *reactant_species* get a thicker, more opaque line to signal their direct chemical involvement. :param ax: Axes to draw on. :type ax: plt.Axes :param time: Time series (years) for the x-axis. :type time: pd.Series :param species: UCLCHEM name of the primary species. :type species: str :param chem: Chemistry (abundance) DataFrame, already filtered to the desired time range. :type chem: pd.DataFrame :param companion: Additional species to overlay. Pass ``None`` (default) to show only *species*. :type companion: list[str] | None :param reactant_species: Species that appear as reactants in the top reactions; these are rendered with higher visual weight. Default: empty set. :type reactant_species: set[str] | None :param color_registry: Shared color map (species name → hex string). Pass the same dict to multiple panel calls to keep colors consistent. A fresh registry is created when ``None`` is passed. Default: ``None``. :type color_registry: dict[str, str] | None :returns: **ax** -- The modified axes. :rtype: plt.Axes .. py:function:: draw_panel_rate_constants(ax: matplotlib.pyplot.Axes, time: pandas.Series, prod_k: pandas.DataFrame, dest_k: pandas.DataFrame, top_prod: list[str] | None = None, top_dest: list[str] | None = None, *, top_k: int | None = 5, bar: bool = False, color_registry: dict[str, str] | None = None) -> matplotlib.pyplot.Axes Draw rate constants onto *ax* (Panel C of a deepdive figure). By default draws rate constants as time series so trends are visible. Pass ``bar=True`` for a mean bar chart; a warning is emitted for any reaction whose rate constant varies significantly over time (CV > 1 %). :param ax: Axes to draw on. :type ax: plt.Axes :param time: Time series (years) for the x-axis. :type time: pd.Series :param prod_k: Rate-constant DataFrame for production reactions, already filtered to the desired time range. :type prod_k: pd.DataFrame :param dest_k: Rate-constant DataFrame for destruction reactions. :type dest_k: pd.DataFrame :param top_prod: Reaction column names to include for production. When ``None``, the top *top_k* reactions by mean rate constant are selected. Default: ``None``. :type top_prod: list[str] | None :param top_dest: Reaction column names to include for destruction. When ``None``, the top *top_k* reactions by mean rate constant are selected. Default: ``None``. :type top_dest: list[str] | None :param top_k: Number of top reactions to show when *top_prod* / *top_dest* are ``None``. Pass ``None`` to show all. Default: 5. :type top_k: int | None :param bar: If ``True``, draw a mean bar chart instead of time series. Default: ``False``. :type bar: bool :param color_registry: Shared color map (reaction string → hex string). A fresh registry is created when ``None`` is passed. Default: ``None``. :type color_registry: dict[str, str] | None :returns: **ax** -- The modified axes. :rtype: plt.Axes .. py:function:: draw_panel_rates(ax: matplotlib.pyplot.Axes, time: pandas.Series, prod_rates: pandas.DataFrame, dest_rates: pandas.DataFrame, top_prod: list[str] | None = None, top_dest: list[str] | None = None, *, top_k: int | None = 5, color_registry: dict[str, str] | None = None) -> matplotlib.pyplot.Axes Draw production and destruction rates onto *ax* (Panel B of a deepdive figure). Total formation and destruction envelopes are always drawn in black. Reactions listed in *top_prod* / *top_dest* are drawn individually in tab20 colors; remaining reactions are summed into a gray "Other" line. :param ax: Axes to draw on. :type ax: plt.Axes :param time: Time series (years) for the x-axis. :type time: pd.Series :param prod_rates: Per-reaction production rates (abundance wrt H s⁻¹), already filtered to the desired time range. :type prod_rates: pd.DataFrame :param dest_rates: Per-reaction destruction rates (absolute values), already filtered. :type dest_rates: pd.DataFrame :param top_prod: Reaction column names to draw individually for production. When ``None``, the top *top_k* reactions by mean rate are selected. Default: ``None``. :type top_prod: list[str] | None :param top_dest: Reaction column names to draw individually for destruction. When ``None``, the top *top_k* reactions by mean rate are selected. Default: ``None``. :type top_dest: list[str] | None :param top_k: Number of top reactions to show individually when *top_prod* / *top_dest* are ``None``. Pass ``None`` to show all reactions. Default: 5. :type top_k: int | None :param color_registry: Shared color map (reaction string → hex string). Pass the same dict to multiple panel calls to keep colors consistent. A fresh registry is created when ``None`` is passed. Default: ``None``. :type color_registry: dict[str, str] | None :returns: **ax** -- The modified axes. :rtype: plt.Axes .. py:function:: plot_species(ax: matplotlib.pyplot.Axes, df: pandas.DataFrame, species: list[str], legend: bool = True, plot_kwargs: dict[str, Any] | None = None) -> matplotlib.pyplot.Axes Plot the abundance of a list of species through time directly onto an axis. :param ax: An axis object to plot on :type ax: plt.Axes :param df: A dataframe created by ``uclchem.analysis.read_output_file``, ``uclchem.model.load_model`` or ``uclchem.model.Model.get_dataframes``. :type df: pd.DataFrame :param species: A list of species names to be plotted. If species name starts with "$" instead of "#" or "@", plots the sum of surface and bulk abundances :type species: list[str] :param legend: Whether to add a legend to the plot. Default = True. :type legend: bool :param plot_kwargs: keyword arguments passed to ``ax.plot``. Default = None. :type plot_kwargs: dict[str, Any] | None :returns: **ax** -- Modified input axis is returned :rtype: plt.Axes :raises KeyError: if no ``"Time"`` column is present in ``df``.