o
    dX7                     @   s   d dl mZ d dlmZmZ d dlmZ d dlmZ e	dZ
e	dZe	dZe	dZd	Zd
Zdd ZddddedddfddZG dd deZdS )    )absolute_import)
exceptionsoptional_imports)utils)
graph_objsnumpypandasscipyzscipy.statszprobability densityprobabilityc                 C   sh   t f}tr|tjf7 }tr|tjjjf7 }t| d |s!t	dd}||vr,t	dt
s2tddS )z
    Distplot-specific validations

    :raises: (PlotlyError) If hist_data is not a list of lists
    :raises: (PlotlyError) If curve_type is not valid (i.e. not 'kde' or
        'normal').
    r   zOops, this function was written to handle multiple datasets, if you want to plot just one, make sure your hist_data variable is still a list of lists, i.e. x = [1, 2, 3] -> x = [[1, 2, 3]])kdenormalz/curve_type must be defined as 'kde' or 'normal'z,FigureFactory.create_distplot requires scipyN)listnpndarraypdcoreseriesSeries
isinstancer   PlotlyErrorr	   ImportError)	hist_data
curve_typehist_data_types
curve_opts r   d/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/plotly/figure_factory/_distplot.pyvalidate_distplot   s"   	r         ?r   NTc
                 C   s  |du rg }|du rg }t | | t| | t|ttfr%|gt|  }g }
|r<t| ||||||||	 }|
	| |rd|dkrQt| ||||||||	
 }nt| ||||||||	 }|
	| |	rt| ||||||||	 }|
	| tjddtddtddgd	d
dtddgdddtddgddd
dd}ntjddtddtddgd	d
dtddgdddd}t|
g }
tj|
|dS )aB  
    Function that creates a distplot similar to seaborn.distplot;
    **this function is deprecated**, use instead :mod:`plotly.express`
    functions, for example

    >>> import plotly.express as px
    >>> tips = px.data.tips()
    >>> fig = px.histogram(tips, x="total_bill", y="tip", color="sex", marginal="rug",
    ...                    hover_data=tips.columns)
    >>> fig.show()


    The distplot can be composed of all or any combination of the following
    3 components: (1) histogram, (2) curve: (a) kernel density estimation
    or (b) normal curve, and (3) rug plot. Additionally, multiple distplots
    (from multiple datasets) can be created in the same plot.

    :param (list[list]) hist_data: Use list of lists to plot multiple data
        sets on the same plot.
    :param (list[str]) group_labels: Names for each data set.
    :param (list[float]|float) bin_size: Size of histogram bins.
        Default = 1.
    :param (str) curve_type: 'kde' or 'normal'. Default = 'kde'
    :param (str) histnorm: 'probability density' or 'probability'
        Default = 'probability density'
    :param (bool) show_hist: Add histogram to distplot? Default = True
    :param (bool) show_curve: Add curve to distplot? Default = True
    :param (bool) show_rug: Add rug to distplot? Default = True
    :param (list[str]) colors: Colors for traces.
    :param (list[list]) rug_text: Hovertext values for rug_plot,
    :return (dict): Representation of a distplot figure.

    Example 1: Simple distplot of 1 data set

    >>> from plotly.figure_factory import create_distplot

    >>> hist_data = [[1.1, 1.1, 2.5, 3.0, 3.5,
    ...               3.5, 4.1, 4.4, 4.5, 4.5,
    ...               5.0, 5.0, 5.2, 5.5, 5.5,
    ...               5.5, 5.5, 5.5, 6.1, 7.0]]
    >>> group_labels = ['distplot example']
    >>> fig = create_distplot(hist_data, group_labels)
    >>> fig.show()


    Example 2: Two data sets and added rug text

    >>> from plotly.figure_factory import create_distplot
    >>> # Add histogram data
    >>> hist1_x = [0.8, 1.2, 0.2, 0.6, 1.6,
    ...            -0.9, -0.07, 1.95, 0.9, -0.2,
    ...            -0.5, 0.3, 0.4, -0.37, 0.6]
    >>> hist2_x = [0.8, 1.5, 1.5, 0.6, 0.59,
    ...            1.0, 0.8, 1.7, 0.5, 0.8,
    ...            -0.3, 1.2, 0.56, 0.3, 2.2]

    >>> # Group data together
    >>> hist_data = [hist1_x, hist2_x]

    >>> group_labels = ['2012', '2013']

    >>> # Add text
    >>> rug_text_1 = ['a1', 'b1', 'c1', 'd1', 'e1',
    ...       'f1', 'g1', 'h1', 'i1', 'j1',
    ...       'k1', 'l1', 'm1', 'n1', 'o1']

    >>> rug_text_2 = ['a2', 'b2', 'c2', 'd2', 'e2',
    ...       'f2', 'g2', 'h2', 'i2', 'j2',
    ...       'k2', 'l2', 'm2', 'n2', 'o2']

    >>> # Group text together
    >>> rug_text_all = [rug_text_1, rug_text_2]

    >>> # Create distplot
    >>> fig = create_distplot(
    ...     hist_data, group_labels, rug_text=rug_text_all, bin_size=.2)

    >>> # Add title
    >>> fig.update_layout(title='Dist Plot') # doctest: +SKIP
    >>> fig.show()


    Example 3: Plot with normal curve and hide rug plot

    >>> from plotly.figure_factory import create_distplot
    >>> import numpy as np

    >>> x1 = np.random.randn(190)
    >>> x2 = np.random.randn(200)+1
    >>> x3 = np.random.randn(200)-1
    >>> x4 = np.random.randn(210)+2

    >>> hist_data = [x1, x2, x3, x4]
    >>> group_labels = ['2012', '2013', '2014', '2015']

    >>> fig = create_distplot(
    ...     hist_data, group_labels, curve_type='normal',
    ...     show_rug=False, bin_size=.4)


    Example 4: Distplot with Pandas

    >>> from plotly.figure_factory import create_distplot
    >>> import numpy as np
    >>> import pandas as pd

    >>> df = pd.DataFrame({'2012': np.random.randn(200),
    ...                    '2013': np.random.randn(200)+1})
    >>> fig = create_distplot([df[c] for c in df.columns], df.columns)
    >>> fig.show()
    Nr   overlayclosestreversed)
traceorderg        r   y2F)domainanchorzerolinegffffff?   free)r$   r%   positionr   g      ?x1)r$   r%   dtickshowticklabels)barmode	hovermodelegendxaxis1yaxis1yaxis2)r-   r.   r/   r0   r1   )datalayout)r   r   validate_equal_lengthr   floatintlen	_Distplot	make_histappendmake_normalmake_kdemake_rugr   LayoutdictsumFigure)r   group_labelsbin_sizer   colorsrug_texthistnorm	show_hist
show_curveshow_rugr3   histcurverugr4   r   r   r   create_distplot4   s   {







	
rN   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )r9   z?
    Refer to TraceFactory.create_distplot() for docstring
    c
                 C   s   || _ || _|| _|| _|| _|	| _t|| _|r|| _nd g| j | _g | _	g | _
|r0|| _ng d| _d g| j | _d g| j | _| j D ]}
| j	t|
d  | j
t|
d  qFd S )N)
zrgb(31, 119, 180)zrgb(255, 127, 14)zrgb(44, 160, 44)zrgb(214, 39, 40)zrgb(148, 103, 189)zrgb(140, 86, 75)zrgb(227, 119, 194)zrgb(127, 127, 127)zrgb(188, 189, 34)zrgb(23, 190, 207)r   )r   rG   rC   rD   rH   rI   r8   trace_numberrF   startendrE   curve_xcurve_yr;   minmax)selfr   rG   rC   rD   r   rE   rF   rH   rI   tracer   r   r   __init__  s*   


z_Distplot.__init__c                 C   s   dg| j  }t| j D ]6}td| j| dd| j| j| | j| t| j|t| j  ddt| j| | j	| | j
| ddd	||< q|S )
z
        Makes the histogram(s) for FigureFactory.create_distplot().

        :rtype (list) hist: list of histogram representations
        N	histogramr*   y1colorF)rP   rQ   sizegffffff?)typexxaxisyaxisrG   namelegendgroupmarkerautobinxxbinsopacity)rO   ranger@   r   rG   rC   rE   r8   rP   rQ   rD   )rV   rK   indexr   r   r   r:   A  s(   z_Distplot.make_histc                    s   dgj  }tj D ]2  fddtdD j < tj  j  j < jtkr=j   j	  9  < qtj D ]. t
dj  j  dddj  j  jr_d	nd
t
j tj  dd
| < qC|S )z
        Makes the kernel density estimation(s) for create_distplot().

        This is called when curve_type = 'kde' in create_distplot().

        :rtype (list) curve: list of kde representations
        Nc                    2   g | ]}j   |j  j     d   qS   rP   rQ   .0r_   ri   rV   r   r   
<listcomp>g      $z&_Distplot.make_kde.<locals>.<listcomp>rl   scatterr*   rZ   linesFTr[   
r^   r_   yr`   ra   moderb   rc   
showlegendrd   )rO   rh   rR   scipy_statsgaussian_kder   rS   rG   ALTERNATIVE_HISTNORMrD   r@   rC   rH   rE   r8   )rV   rL   r   rp   r   r=   ]  s2   

z_Distplot.make_kdec                    s$  dgj  }dgj  }dgj  }tj D ]D tjj  \| < | <  fddtdD j < tjjj  |  |  dj < j	t
kr[j   j  9  < qtj D ]. tdj  j  ddd	j  j  jr}d
ndtj tj  dd
| < qa|S )z
        Makes the normal curve(s) for create_distplot().

        This is called when curve_type = 'normal' in create_distplot().

        :rtype (list) curve: list of normal curve representations
        Nc                    rj   rk   rm   rn   rp   r   r   rq     rr   z)_Distplot.make_normal.<locals>.<listcomp>rl   )locscalers   r*   rZ   rt   FTr[   ru   )rO   rh   ry   normfitr   rR   pdfrS   rG   r{   rD   r@   rC   rH   rE   r8   )rV   rL   meansdr   rp   r   r<     s8   
z_Distplot.make_normalc                 C   s   dg| j  }t| j D ]>}td| j| | j| gt| j|  ddd| j| | j| | js0| jr2dnd| j| t| j	|t| j	  dd	d
||< q|S )z{
        Makes the rug plot(s) for create_distplot().

        :rtype (list) rug: list of rug plot representations
        Nrs   r*   r#   markersFTzline-ns-open)r\   symbol)r^   r_   rv   r`   ra   rw   rb   rc   rx   textrd   )
rO   rh   r@   r   rC   r8   rH   rI   rF   rE   )rV   rM   ri   r   r   r   r>     s$   z_Distplot.make_rugN)	__name__
__module____qualname____doc__rX   r:   r=   r<   r>   r   r   r   r   r9     s    0$(r9   )
__future__r   plotlyr   r   plotly.figure_factoryr   plotly.graph_objsr   
get_moduler   r   r	   ry   DEFAULT_HISTNORMr{   r   rN   objectr9   r   r   r   r   <module>   s,    



%
 Y