U
    Âmœd]  ã                   @   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„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Úbaselinec             
      s`  t  |¡}t|ƒ}|dk	r&t |¡}n‡ fdd„|D ƒ}t j|dt  |jt j¡d�}t	j
dddd	g|d
� |dkrzd}	�n8|dkr¬t  |d¡ d }	||	ddd…f 7 }�n|dkrú|jd }
||
d t  |
¡dd…df    d¡}	|	|
  }	||	7 }n¸|d	k�r²t  |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|dƒdœ|—Ž}dg|jjdd…< |g}tt|ƒd ƒD ]N}| ˆ j|||dd…f ||d dd…f ft|ƒt|dƒdœ|—Ž¡ �q|S )aÚ  
    Draw a stacked area plot.

    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 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.

    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   úM/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/stackplot.pyÚ	<genexpr>M   s     zstackplot.<locals>.<genexpr>r   )ZaxisÚdtyper   ÚsymZwiggleZweighted_wiggle)r   g        g      à?g      ð?é   )Z	facecolorÚlabel)ÚnpZ	row_stackÚiterÚ	itertoolsÚcycleZ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   ÚargsÚkwargsr   ÚstackÚ
first_lineÚmÚtotalZ	inv_totalÚmaskZincreaseZ
below_sizeZmove_upÚcenterZcollÚrÚir   r   r   r      sb    5
ÿ
(



$ ÿþ,þý)Ú__doc__r   Únumpyr   Z
matplotlibr   Ú__all__r   r   r   r   r   Ú<module>   s     ÿ