Source code for biopsykit.protocols.car

"""Module representing the Cortisol Awakening Response (CAR) protocol."""

import matplotlib.pyplot as plt

from biopsykit.plotting import lineplot
from biopsykit.protocols import BaseProtocol
from biopsykit.utils.dtypes import is_saliva_raw_dataframe


[docs]class CAR(BaseProtocol): """Class representing psychological protocols for assessing the cortisol awakening response (CAR).""" def __init__(self, name: str | None = None, **kwargs): """Class representing psychological protocols for assessing the cortisol awakening response (CAR). Parameters ---------- name : str, optional name of CAR study or ``None`` to use default name ("CAR"). Default: ``None`` **kwargs additional parameters to be passed to ``CAR`` and its superclass, ``BaseProtocol``, such as: * ``car_saliva_plot_params``: parameters to style :meth:`~biopsykit.protocols.CAR.car_saliva_plot` """ if name is None: name = "CAR" car_saliva_plot_params = {"xlabel": "Time after Awakening [min]", "ylabel": r"Cortisol [nmol/l]"} car_saliva_plot_params.update(kwargs.pop("car_saliva_plot_params", {})) self.car_plot_params = car_saliva_plot_params """Plot parameters to style :meth:`~biopsykit.protocols.CAR.car_saliva_plot`.""" super().__init__(name, **kwargs)
[docs] def car_saliva_plot(self, saliva_type: str | None = "cortisol", **kwargs) -> tuple[plt.Figure, plt.Axes]: """Plot CAR saliva data as lineplot. Parameters ---------- saliva_type : str, optional type of saliva data to plot. Default: ``cortisol`` **kwargs : optional arguments to be passed to :func:`~biopsykit.plotting.lineplot` Returns ------- fig : :class:`~matplotlib.figure.Figure` figure object ax : :class:`~matplotlib.axes.Axes` axes object See Also -------- :func:`~biopsykit.plotting.lineplot` draw line plot with error bars """ data = self.saliva_data[saliva_type] is_saliva_raw_dataframe(data, saliva_type) kwargs.setdefault("x", "sample") kwargs.setdefault("y", saliva_type) kwargs.setdefault("xticklabels", kwargs.get("sample_times", self.sample_times[saliva_type])) if len(data.index.get_level_values(kwargs.get("x")).unique()) != len(kwargs.get("xticklabels")): raise ValueError( "If samples have individual sample times for each subject, sample times for plotting must " "explicitly be provided by the 'sample_times' argument!" ) kwargs.update(self.car_plot_params) return lineplot(data, **kwargs)