Source code for preliz.distributions.plot

from preliz.ppls.pymc_io import if_pymc_get_preliz


[docs] def plot( dist, kind="pdf", moments=None, marginals=True, pointinterval=False, interval=None, levels=None, support="restricted", baseline=True, legend="legend", figsize=None, ax=None, **kwargs, ): """ Plot distribution functions, including pdf, cdf, ppf, sf and isf. Parameters ---------- kind : str Specify which distribution function to plot. Defaults to ``pdf``, i.e. the probability density function for continuos distributions or probability mass function for discrete distributions. Others possible values are: * ``cdf`` cumulative distribution function * ``ppf`` percent point function, also know as inverse of the cdf * ``sf`` survival function (1-cdf) * ``isf`` inverse survival function moments : str Compute moments. Use any combination of the strings ``m``, ``d``, ``v``, ``s`` or ``k`` for the mean (μ), standard deviation (σ), variance (σ²), skew (γ) or kurtosis (κ) respectively. Other strings will be ignored. Defaults to None. Ignored for multivariate distributions. marginals : bool Whether to plot the marginals of the distribution. Only used when plotting multivariate distributions and ``kind="pdf"``. Defaults to True. If False the joint distribution will be plotted when possible. pointinterval : bool Whether to include a plot of the quantiles. Defaults to False. If True the default is to plot the median and two interquantiles ranges. interval : str Type of interval. Available options are highest density interval `"hdi"` (default), equal tailed interval `"eti"` or intervals defined by arbitrary `"quantiles"`. Defaults to the value in rcParams["stats.ci_kind"]. levels : list Mass of the intervals. For hdi or eti the number of elements should be 2 or 1. For quantiles the number of elements should be 5, 3, 1 or 0 (in this last case nothing will be plotted). support : str: If ``full`` use the finite end-points to set the limits of the plot. For unbounded end-points or if ``restricted`` use the 0.001 and 0.999 quantiles to set the limits. Ignored when ``kind="ppf"``, ``kind="isf"``. baseline : bool Whether to include a horizontal line at y=0. Only used when ``kind="pdf"``, ignored otherwise. legend : str Whether to include a string with the distribution and its parameter as a ``"legend"`` a ``"title"`` or not include them ``None``. figsize : tuple Size of the figure ax : matplotlib axes kwargs : keyword arguments Additional keyword arguments passed to matplotlib plot function. For example, ``color``, ``alpha``, ``linewidth``, etc. """ if kind not in ["pdf", "cdf", "ppf", "sf", "isf"]: raise ValueError(f"kind should be one of {['pdf', 'cdf', 'ppf', 'sf', 'isf']}") dist = if_pymc_get_preliz(dist) mandatory_kwargs = { "moments": moments, "pointinterval": pointinterval, "interval": interval, "levels": levels, "support": support, "baseline": baseline, "legend": legend, "figsize": figsize, "ax": ax, } if kind != "pdf": mandatory_kwargs.pop("baseline") if kind in ["ppf", "isf"]: mandatory_kwargs.pop("support") if dist.__class__.__name__ in ["MvNormal", "Dirichlet"]: mandatory_kwargs.pop("moments") if kind == "pdf": mandatory_kwargs["marginals"] = marginals return getattr(dist, f"plot_{kind}")(**mandatory_kwargs, **kwargs)