o
    d%;                     @  s  d dl mZ d dlmZmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZmZ d d
lmZmZ d dlmZ d dlmZmZmZm Z  erfd dl!m"Z" d dl#m$Z$ G dd deZ%G dd de%Z&								 	d*d+ddZ'															d,d-d#d$Z(									%	d.d/d&d'Z)													%	d0d1d(d)Z*dS )2    )annotations)TYPE_CHECKINGLiteralN)PlottingOrientation)
is_integeris_list_like)ABCDataFrameABCIndex)isnaremove_na_arraylike)pprint_thing)LinePlotMPLPlot)create_iter_data_given_byreformat_hist_y_given_by)unpack_single_str_list)create_subplotsflatten_axesmaybe_adjust_figureset_ticks_props)Axes)	DataFramec                   @  s   e Zd Zed%ddZ		d&d'ddZd(ddZd)ddZe				d*d+ddZ	d(ddZ
dd Zd,d d!Zed-d#d$ZdS ).HistPlotreturnLiteral['hist', 'kde']c                 C     dS )Nhist selfr   r   e/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/pandas/plotting/_matplotlib/hist.py_kind1      zHistPlot._kind
   r   bins#int | np.ndarray | list[np.ndarray]bottomint | np.ndarrayNonec                 K  s<   || _ || _|d| _|d| _tj| |fi | d S )Nxlabelylabel)r$   r&   getr)   r*   r   __init__)r   datar$   r&   kwargsr   r   r    r,   5   s
   zHistPlot.__init__c                   st   t  jr* jd ur#t j} j| j } fdd|D  _n  j _t j	r8t
 j	 _	d S d S )Nc                   s   g | ]	\}}  |qS r   )_calculate_bins).0keygroupr   r   r    
<listcomp>J   s    z)HistPlot._args_adjust.<locals>.<listcomp>)r   r$   byr   r-   groupbycolumnsr/   r   r&   nparray)r   by_modifiedgroupedr   r   r    _args_adjustC   s   



zHistPlot._args_adjustr-   r   
np.ndarrayc                 C  sL   |j dd }t|}|t|  }tj|| j| jddd\}}|S )zCalculate bins given dataF)copyrangeN)r$   r>   )	infer_objects_get_numeric_datar7   ravelr
   	histogramr$   kwdsr+   )r   r-   	nd_valuesvaluesr   r$   r   r   r    r/   Q   s   

zHistPlot._calculate_binsN
column_numintc                K  sx   |dkr|  ||t|d  tt|d }	|| |||	|d  }|j|f||d|\}
}}| |||
 |S )Nr      label)r$   r&   )_initialize_stackerlenr7   zeros_get_stacked_valuesr   _update_stacker)clsaxystyler&   rF   stacking_idr$   rC   basenpatchesr   r   r    _plot]   s   zHistPlot._plotc                 C  s  |   }|  }| jd urt| j| jn| j}t| j|dD ]\}\}}| |}| j	
 }t|}| j||d}||d< | ||||\}	}|	d urP|	|d< | ||}| jd urm|d | |d< | j|d< |d |dd }
|
d urt|
dkrt|
d	 dkrz
|
d d |f }
W n ty } ztd
|d }~ww |
t|  }
|
|d< t|| j}| j||f||d|}| jd ur|t| | |d | qd S )N)r-   )indexrI   rR   r$   colorweightsrH   z?weights must have the same shape as data, or be a single column)rF   rS   r   )_get_colors_get_stacking_idr4   r   r-   r!   	enumerate
_iter_data_get_axrC   r=   r   _mark_right_label_apply_style_colors_make_plot_keywordsr6   popr+   r7   ndimshape
IndexError
ValueErrorr
   r   rW   	set_title_append_legend_handles_labels)r   colorsrS   r-   irI   rQ   rP   rC   rR   rZ   errartistsr   r   r    
_make_plott   sR   




 
zHistPlot._make_plotc                 C  s   | j |d< | j|d< |S )z/merge BoxPlot/KdePlot properties to passed kwdsr&   r$   )r&   r$   r   rC   rQ   r   r   r    rc      s   

zHistPlot._make_plot_keywordsrP   r   c                 C  s^   | j dkr|| jd u rdn| j || j d S || j || jd u r)dn| j d S )N
horizontal	Frequency)orientation
set_xlabelr)   
set_ylabelr*   r   rP   r-   r   r   r    _post_plot_logic   s
   
zHistPlot._post_plot_logicr   c                 C  s   | j dd dkrdS dS )Nrs   rq   vertical)rC   r+   r   r   r   r    rs      s   zHistPlot.orientation)r   r   )r#   r   )r$   r%   r&   r'   r   r(   r   r(   )r-   r   r   r<   )Nr   r   N)r&   r'   rF   rG   )rP   r   r   r(   )r   r   )__name__
__module____qualname__propertyr!   r,   r;   r/   classmethodrW   ro   rc   rw   rs   r   r   r   r    r   0   s&    


;
r   c                   @  sp   e Zd ZedddZedddZddd
dZdddZdd Ze						dddZ
dd ZdddZdS )KdePlotr   Literal['kde']c                 C  r   )Nkder   r   r   r   r    r!      r"   zKdePlot._kindLiteral['vertical']c                 C  r   )Nrx   r   r   r   r   r    rs      r"   zKdePlot.orientationNr(   c                 K  s$   t j| |fi | || _|| _d S N)r   r,   	bw_methodind)r   r-   r   r   r.   r   r   r    r,      s   
zKdePlot.__init__c                 C  s   d S r   r   r   r   r   r    r;      s   zKdePlot._args_adjustc                 C  s   | j d u r&t|t| }tt|d|  t|d|  d}|S t| j rMt|t| }tt|d|  t|d|  | j }|S | j }|S )N      ?i  )r   r7   nanmaxnanminlinspacer   )r   rQ   sample_ranger   r   r   r    _get_ind   s$   

zKdePlot._get_indc                 K  sH   ddl m}	 t|}|	||d}
|
|}tj|||fd|i|}|S )Nr   )gaussian_kde)r   rR   )scipy.statsr   r   evaluater   rW   )rO   rP   rQ   rR   r   r   rF   rS   rC   r   gkdelinesr   r   r    rW      s   
zKdePlot._plotc                 C  s   | j |d< | ||d< |S )Nr   r   )r   r   rp   r   r   r    rc     s   
zKdePlot._make_plot_keywordsc                 C  s   | d d S )NDensity)ru   rv   r   r   r    rw     s   zKdePlot._post_plot_logic)r   r   )r   r   )NNry   )NNNNN)rz   r{   r|   r}   r!   rs   r,   r;   r   r~   rW   rc   rw   r   r   r   r    r      s"    
r   Tnumeric_onlyboolsharexshareyrotfloatc                 K  s   |dkrt d||}|d ur|| }t|}t|||||
|d\}}t|}t|D ]%\}\}}|| }
|rBt|trB| }| ||
fi | |
	t
| q-||fS )NdefaultzNfigsize='default' is no longer supported. Specify figure size by tuple instead)naxesfigsizer   r   rP   layout)rh   r5   rK   r   r   r^   
isinstancer   r@   ri   r   )plotfr-   columnr4   r   r   r   r   r   r   rP   r.   r:   r   figaxes_axesrl   r1   r2   r   r   r    _grouped_plot
  s&   

r   2   FZ   r$   rG   gridlegendc                   s   r!dvsJ | j dkr| jd< n|du r| jd< n|d< d fdd}|du r0|	}t|| ||||||||	d
\}}t|||||d	 t|d
dddddd |S )a  
    Grouped histogram

    Parameters
    ----------
    data : Series/DataFrame
    column : object, optional
    by : object, optional
    ax : axes, optional
    bins : int, default 50
    figsize : tuple, optional
    layout : optional
    sharex : bool, default False
    sharey : bool, default False
    rot : float, default 90
    grid : bool, default True
    legend: : bool, default False
    kwargs : dict, keyword arguments passed to matplotlib.Axes.hist

    Returns
    -------
    collection of Matplotlib Axes
    rI   rH   Nr   r(   c                   s0   |j |  jfd i r|  d S d S )Nr$   )r   dropnarE   r   )r2   rP   r$   r.   r   r   r    
plot_groupg  s   z!_grouped_hist.<locals>.plot_group)r   r4   r   r   rP   r   r   r   
xlabelsizexrot
ylabelsizeyrotg333333?g?g?r   333333?)r&   topleftrighthspacewspacery   )re   namer6   r   r   r   )r-   r   r4   rP   r$   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   r   r   r    _grouped_hist4  s:   *


r   r#   c                 K  s|  dd l m} |
rd|v rtd|d u r|dd d ur td|d| r+| n|j|d}|d urHt|t|	 krH|j
|dd	i |d u rQ| }n
| |kr[td
|  j}|
rg| j|d< |j|fd|	i| |
rx|  || t|g}t|||||d nd|v rtdt| f|||||	|||||
d
|}t|dr|jdkrt|dkr|d S |S )Nr   rI    Cannot use both legend and labelr   z7The 'layout' keyword is not supported when 'by' is Nonefigure)r   forwardTz&passed axis not bound to passed figurer$   r   z`Cannot pass 'figure' when using the 'by' argument, since a new 'Figure' instance will be created)
r4   rP   r   r   r$   r   r   r   r   r   re   rH   )matplotlib.pyplotpyplotrh   r+   rd   get_fignumsgcfr   tupleget_size_inchesset_size_inchesgca
get_figureAssertionErrorr   rE   r   r   r   r   r7   r8   r   r   hasattrre   rK   )r   r4   rP   r   r   r   r   r   r   r$   r   rC   pltr   rE   r   r   r   r    hist_series  sd   





r   c                 K  s`  |r
d|v r
t d|d ur't| f||||||	|
|||||||d|}|S |d ur;t|ttjtfs7|g}| | } | jtjddfdd} t	| j
}|dkrSt d	t||d
|	|
||d\}}t|}d|v}t| j
D ]0\}}|| }|r}|r}||d< |j| |  jfd|i| || || |r|  qmt|||||d t|ddd |S )NrI   r   )r   r4   rP   r   r   r   r   r   r$   r   r   r   r   r   
datetime64
datetimetz	timedelta)includeexcluder   zDhist method requires numerical or datetime columns, nothing to plot.F)r   rP   squeezer   r   r   r   r$   r   r   )r   r   )rh   r   r   listr7   ndarrayr	   select_dtypesnumberrK   r6   r   r   r^   r   r   rE   ri   r   r   r   r   )r-   r   r4   r   r   r   r   r   rP   r   r   r   r   r$   r   rC   r   r   r   r   can_set_labelrl   colr   r   r    
hist_frame  s|   

	 


r   )	NNTNTTNr   N)r   r   r   r   r   r   r   r   )NNNr   NNFFr   TNNNNF)r$   rG   r   r   r   r   r   r   r   r   r   r   )
NNTNNNNNr#   F)r   r   r$   rG   r   r   )NNTNNNNNFFNNr#   F)
r   r   r   r   r   r   r$   rG   r   r   )+
__future__r   typingr   r   numpyr7   pandas._typingr   pandas.core.dtypes.commonr   r   pandas.core.dtypes.genericr   r	   pandas.core.dtypes.missingr
   r   pandas.io.formats.printingr    pandas.plotting._matplotlib.corer   r   #pandas.plotting._matplotlib.groupbyr   r    pandas.plotting._matplotlib.miscr   !pandas.plotting._matplotlib.toolsr   r   r   r   matplotlib.axesr   pandasr   r   r   r   r   r   r   r   r   r   r    <module>   s     G,TJ