a
    8ghh                     @   s>   d Z ddlZddlZddlmZ dgZdddddddZdS )	z
Stacked area plot for 1D arrays inspired by Douglas Y'barbo's stackoverflow
answer:
https://stackoverflow.com/q/2225995/

(https://stackoverflow.com/users/66549/doug)
    N)_api	stackplot zero)labelscolorshatchbaselinec             
      s  t |}t|}|dur&t|}n fdd|D }|du sJt|trXt|g}n
t|}t j|dt |j	t j
d}	tjg d|d |dkrd	}
n:|d
krt |d d }
|	|
dddf 7 }	n|dkr"|jd }||d t |dddf   d}
|
|  }
|	|
7 }	n|dkrt |d}t |}|dk}d||  ||< t |ddddf t |f}||	 }|d| 7 }|| }d|dddf< |d | }t |d}|d|  }
|	|
7 }	 j||
|	dddf ft|t|t|dd|}dg|jjdd< |g}tt|d D ]T}| j||	|ddf |	|d ddf ft|t|t|dd| q:|S )a  
    Draw a stacked area plot or a streamgraph.

    Parameters
    ----------
    x : (N,) array-like

    y : (M, N) array-like
        The data is assumed to be unstacked. Each of the following
        calls is legal::

            stackplot(x, y)           # where y has shape (M, N)
            stackplot(x, y1, y2, y3)  # where y1, y2, y3, y4 have length N

    baseline : {'zero', 'sym', 'wiggle', 'weighted_wiggle'}
        Method used to calculate the baseline:

        - ``'zero'``: Constant zero baseline, i.e. a simple stacked plot.
        - ``'sym'``:  Symmetric around zero and is sometimes called
          'ThemeRiver'.
        - ``'wiggle'``: Minimizes the sum of the squared slopes.
        - ``'weighted_wiggle'``: Does the same but weights to account for
          size of each layer. It is also called 'Streamgraph'-layout. More
          details can be found at http://leebyron.com/streamgraph/.

    labels : list of str, optional
        A sequence of labels to assign to each data series. If unspecified,
        then no labels will be applied to artists.

    colors : list of :mpltype:`color`, optional
        A sequence of colors to be cycled through and used to color the stacked
        areas. The sequence need not be exactly the same length as the number
        of provided *y*, in which case the colors will repeat from the
        beginning.

        If not specified, the colors from the Axes property cycle will be used.

    hatch : list of str, default: None
        A sequence of hatching styles.  See
        :doc:`/gallery/shapes_and_collections/hatch_style_reference`.
        The sequence will be cycled through for filling the
        stacked areas from bottom to top.
        It need not be exactly the same length as the number
        of provided *y*, in which case the styles will repeat from the
        beginning.

        .. versionadded:: 3.9
           Support for list input

    data : indexable object, optional
        DATA_PARAMETER_PLACEHOLDER

    **kwargs
        All other keyword arguments are passed to `.Axes.fill_between`.

    Returns
    -------
    list of `.PolyCollection`
        A list of `.PolyCollection` instances, one for each element in the
        stacked area plot.
    Nc                 3   s   | ]} j  V  qd S )N)Z
_get_linesZget_next_color).0_axesr   d/mounts/lovelace/software/anaconda3/envs/metaDMG/lib/python3.9/site-packages/matplotlib/stackplot.py	<genexpr>Y       zstackplot.<locals>.<genexpr>r   )Zaxisdtype)r   symwiggleweighted_wiggle)r	   r   g        r   g      ?r   r   g      ?   )Z	facecolorr   label)npZvstackiter	itertoolscycle
isinstancestrZcumsumZpromote_typesr   Zfloat32r   Zcheck_in_listsumshapeZarangeZ
zeros_likeZhstackdiffZfill_betweennextZsticky_edgesyrangelenappend)r   xr   r   r   r	   argskwargsr!   stack
first_linemtotalZ	inv_totalmaskZincreaseZ
below_sizeZmove_upcenterZcollrir   r   r   r      sl    A




(



$,)__doc__r   numpyr   Z
matplotlibr   __all__r   r   r   r   r   <module>   s   