Source code for pytseg.plot

"""Plotting helper functions."""
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from typing import List, Union, Any
from pytseg.seg import segmentize

[docs] def plot(x: np.ndarray, s: Union[np.ndarray,None]=None, t: Union[np.ndarray,None]=None, l: Union[np.ndarray,None]=None, cmap: str='brg', figure_kwarg_dict: dict ={}, plot_kwarg_dict: dict={}, new_fig_: bool=True, show_legend_: bool=False, show_fig_: bool=True) -> None: """ Plot univariate time series. Parameters ---------- x : np.ndarray Time series observations. s : Union[np.ndarray,None], optional Array of segment indices for ``x`` (from ``seg.cut``). If set to ``None``, no segments are considered. The default is ``None``. t : Union[np.ndarray,None], optional Time series time steps for each observation. If set to ``None``, the default ``t = np.arange(x.size)`` is considered. The default is ``None``. l : Union[np.ndarray,None], optional Array of labels for each segment in ``s``. If set to ``None``, no labels are considered. The default is ``None``. cmap : str, optional Color map name for plotting different segments. The default is ``'brg'``. figure_kwarg_dict : dict, optional Additional keyword arguments for the figure. The default is ``{}``. plot_kwarg_dict : dict, optional Additional keyword arguments for the plots. The default is ``{}``. new_fig_ : bool, optional Create new figure. Inteded for internal use. The default is ``True``. show_legend_ : bool, optional Show legend. Inteded for internal use. The default is ``False``. show_fig_ : bool, optional Show figure. Inteded for internal use. The default is ``True``. Returns ------- None. """ # preprocess if t is None: t = np.arange(x.size) if l is not None: assert s is not None num_labels = np.unique(l).size cmap_obj = cm.get_cmap(cmap) c = {l_: cmap_obj(l_/(num_labels-1)) for l_ in np.unique(l)} # plot if new_fig_: plt.figure(**figure_kwarg_dict) if s is not None: # segmentized x_seg = segmentize(x, s) t_seg = segmentize(t, s) # plot segments for idx in range(len(x_seg)): x_ = x_seg[idx] t_ = t_seg[idx] if idx != len(x_seg)-1: x_ = np.append(x_, x_seg[idx+1][0]) t_ = np.append(t_, t_seg[idx+1][0]) if l is not None: l_ = l[idx] c_ = c[l_] plt.plot(t_, x_, c=c_, **plot_kwarg_dict) else: plt.plot(t_, x_, **plot_kwarg_dict) else: # not segmentized plt.plot(t, x, **plot_kwarg_dict) if show_legend_: plt.legend() if show_fig_: plt.xlabel('t') plt.ylabel('x(t)') plt.show()
[docs] def plot_multi(X: np.ndarray, S: Union[List[np.ndarray],None]=None, t: Union[np.ndarray,None]=None, L: Union[List[np.ndarray],None]=None, cmap: str='brg', figure_kwarg_dict: dict={}, plot_kwarg_dict: dict={}, label: Union[str,None]=None) -> None: """ Plot multivariate time series. Parameters ---------- X : np.ndarray Time series observations. S : Union[List[np.ndarray],None], optional List of segment index arrays for ``X`` (from ``seg_multi.cut_multi``). If set to ``None``, no segments are considered. The default is ``None``. t : Union[np.ndarray,None], optional Time series time steps for each observation. If set to ``None``, the default in ``plot`` is considered. The default is ``None``. L : Union[List[np.ndarray],None], optional List of label arrays for each segment in ``S``. If set to ``None``, no labels are considered. The default is ``None``. cmap : str, optional Color map name for plotting different segments. The default is ``'brg'``. figure_kwarg_dict : dict, optional Additional keyword arguments for the figure. The default is ``{}``. plot_kwarg_dict : dict, optional Additional keyword arguments for the plots. The default is ``{}``. label : Union[str,None], optional Label prefix for legend. If set to ``None``, no legend is shown. The default is ``None``. Returns ------- None. """ if S is None: S_: List[Any] = [None]*X.shape[0] else: S_ = S.copy() if L is None: L_: List[Any] = [None]*X.shape[0] else: L_ = L.copy() for idx, (x, s, l) in enumerate(zip(X.T, S_, L_)): plot(x.T, s=s, t=t, l=l, cmap=cmap, figure_kwarg_dict=figure_kwarg_dict, plot_kwarg_dict=dict(label=f'{label}{idx}' if label is not None else None, **plot_kwarg_dict), new_fig_=idx==0, show_legend_=idx==X.shape[1]-1 if label is not None else False, show_fig_=idx==X.shape[1]-1)