Source code for systole.plots.plot_poincare

# Author: Nicolas Legrand <nicolas.legrand@cfin.au.dk>

from typing import List, Optional, Tuple, Union

import numpy as np
from bokeh.plotting import figure
from matplotlib.axes import Axes

from systole.plots.utils import get_plotting_function


[docs]def plot_poincare( rr: Union[np.ndarray, list], input_type: str = "peaks", figsize: Optional[Union[List[int], Tuple[int, int], int]] = None, backend: str = "matplotlib", ax: Optional["Axes"] = None, ) -> Union[figure, Axes]: """Poincare plot. Parameters ---------- rr : Boolean vector of peaks detection or RR intervals. input_type : The type of input vector. Default is `"peaks"` (a boolean vector where `1` represents the occurrence of R waves or systolic peaks). Can also be `"rr_s"` or `"rr_ms"` for vectors of RR intervals, or interbeat intervals (IBI), expressed in seconds or milliseconds (respectively). figsize : Figure size. Default is `(13, 5)`. backend : Select plotting backend {"matplotlib", "bokeh"}. Defaults to "matplotlib". ax : Where to draw the plot. Default is `None` (create a new figure). Returns ------- plot : The matplotlib axes, or the boken figure containing the plot. See also -------- plot_frequency Examples -------- Visualizing poincare plot from RR time series using Matplotlib as plotting backend. .. jupyter-execute:: from systole import import_rr from systole.plots import plot_poincare # Import PPG recording as numpy array rr = import_rr().rr.to_numpy() plot_poincare(rr, input_type="rr_ms") Using Bokeh backend .. jupyter-execute:: from bokeh.io import output_notebook from bokeh.plotting import show output_notebook() from systole import import_rr from systole.plots import plot_poincare show( plot_poincare(rr, input_type="rr_ms", backend="bokeh") ) """ # Define figure size if figsize is None: if backend == "matplotlib": figsize = (6, 6) elif backend == "bokeh": figsize = 300 if input_type == "rr_ms": rr = np.asarray(rr) elif input_type == "rr_s": rr = np.asarray(rr) * 1000 elif input_type == "peaks": rr = np.diff(np.where(rr)[0]) plot_poincare_args = { "rr": rr, "figsize": figsize, "ax": ax, } plotting_function = get_plotting_function("plot_poincare", "plot_poincare", backend) plot = plotting_function(**plot_poincare_args) return plot