3
ƽhD                 @   s2   d Z ddlZddljZdgZf dddddZdS )z
Stacked area plot for 1D arrays inspired by Douglas Y'barbo's stackoverflow
answer:
http://stackoverflow.com/questions/2225995/how-can-i-create-stacked-line-graph-with-matplotlib

(http://stackoverflow.com/users/66549/doug)

    N	stackplotzero)labelscolorsbaselinec         	   O   s^  t j|}t|}|dk	r&| j|d t j|dt j|jt jd}tj	ddddg|d	 |dkrhd
}	n8|dkrt j
|d d }	||	dddf 7 }n|dkr|jd }
||
d t j|
dddf   j
d}	|	|
  }	||	7 }n|dkrt j
|d}t j|}|dk}d||  ||< t j|ddddf t j|f}|| }|d| 7 }|| }d|dddf< |d | }t j|j
d}|d|  }	||	7 }| jj }| j||	|dddf f|t|dd|}dg|jjdd< |g}xhtt|d D ]T}| jj }|j| j|||ddf ||d ddf f|t|dd| qW |S )a  
    Draw a stacked area plot.

    Parameters
    ----------
    x : 1d array of dimension N

    y : 2d array (dimension MxN), or sequence of 1d arrays (each dimension 1xN)

        The data is assumed to be unstacked. Each of the following
        calls is legal::

            stackplot(x, y)               # where y is MxN
            stackplot(x, y1, y2, y3, y4)  # where y1, y2, y3, y4, are all 1xNm

    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 : Length N sequence of strings
        Labels to assign to each data series.

    colors : Length N sequence of colors
        A list or tuple of colors. These will be cycled through and used to
        colour the stacked areas.

    **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.
    N)colorr   )Zaxisdtyper   symZwiggleZweighted_wiggle)r   g        g      ?g      ?   )Z	facecolorlabel)npZ	row_stackiterZset_prop_cycleZcumsumZpromote_typesr   Zfloat32cbookZ_check_in_listsumshapeZarangeZ
zeros_likeZhstackZdiffZ
_get_linesZget_next_colorZfill_betweennextZsticky_edgesyrangelenappend)Zaxesxr   r   r   argskwargsr   stack
first_linemtotalZ	inv_totalmaskZincreaseZ
below_sizeZmove_upcenterr   Zcollri r!   :/tmp/pip-build-7iwl8md4/matplotlib/matplotlib/stackplot.pyr      sV    .

(



$

,)__doc__numpyr   Zmatplotlib.cbookr   __all__r   r!   r!   r!   r"   <module>   s   
