U
    f/e/                     @  s   d dl mZ d dlmZ d dl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mZmZ erd d
lmZ G dd deZG dd deZdddZdddZd ddddZd!ddddZ dS )"    )annotations)TYPE_CHECKINGN)
is_integeris_list_like)ABCDataFrameABCIndex)isnaremove_na_arraylike)pprint_thing)LinePlotMPLPlot)create_subplotsflatten_axesmaybe_adjust_figureset_ticks_props)Axesc                   @  sZ   e Zd ZdZdddZdd Zedd	d
Zdd Zdd Z	ddddZ
edd ZdS )HistPlothist
   r   c                 K  s    || _ || _tj| |f| d S N)binsbottomr   __init__)selfdatar   r   kwargs r   D/tmp/pip-unpacked-wheel-tiezk1ph/pandas/plotting/_matplotlib/hist.pyr   '   s    zHistPlot.__init__c                 C  sr   t | jrV| jjdd }t|}|t|  }tj|| j| j	
dd d\}| _t| jrnt| j| _d S )NT)datetimerange)r   r   )r   r   r   _convert_get_numeric_datanpZravelr   Z	histogramkwdsgetr   r   array)r   values_r   r   r   _args_adjust-   s    

  
zHistPlot._args_adjustNc                 K  s   |dkr|  ||t|d  |t|  }tt|d }	|| |||	|d  }|j|f||d|\}
}}| |||
 |S )Nr      label)r   r   )Z_initialize_stackerlenr   r"   zerosZ_get_stacked_valuesr   Z_update_stacker)clsaxystyler   r   
column_numstacking_idr#   basenZpatchesr   r   r   _plot;   s    zHistPlot._plotc                 C  s   |   }|  }t|  D ]\}\}}| |}| j }t|}| j||d}||d< | 	||||\}}|d k	r~||d< | 
||}|dd }	|	d k	rt|	dkr|	d d |f |d< | j||f||d|}
| |
d | qd S )N)indexr*   r0   weightsr)   )r1   r2   r   )Z_get_colorsZ_get_stacking_id	enumerateZ
_iter_dataZ_get_axr#   copyr
   Z_mark_right_labelZ_apply_style_colors_make_plot_keywordsr$   r"   ndimr5   Z_append_legend_handles_labels)r   colorsr2   ir*   r/   r.   r#   r0   r7   Zartistsr   r   r   
_make_plotR   s"    

zHistPlot._make_plotc                 C  s   | j |d< | j|d< |S )z/merge BoxPlot/KdePlot properties to passed kwdsr   r   )r   r   r   r#   r/   r   r   r   r:   o   s    

zHistPlot._make_plot_keywordsr   )r.   c                 C  s$   | j dkr|d n
|d d S )N
horizontalZ	Frequency)orientationZ
set_xlabel
set_ylabelr   r.   r   r   r   r   _post_plot_logicv   s    
zHistPlot._post_plot_logicc                 C  s   | j dd dkrdS dS d S )NrA   r@   vertical)r#   r$   r   r   r   r   rA   |   s    zHistPlot.orientation)r   r   )NNr   r   N)__name__
__module____qualname___kindr   r(   classmethodr5   r>   r:   rD   propertyrA   r   r   r   r   r   $   s   
     r   c                   @  sL   e Zd ZdZdZdddZdd Zdd	 Zedd
dZ	dd Z
dd ZdS )KdePlotZkderE   Nc                 K  s    t j| |f| || _|| _d S r   )r   r   	bw_methodind)r   r   rN   rO   r   r   r   r   r      s    zKdePlot.__init__c                 C  s   d S r   r   rF   r   r   r   r(      s    zKdePlot._args_adjustc                 C  s   | j d krJt|t| }tt|d|  t|d|  d}nRt| j rt|t| }tt|d|  t|d|  | j }n| j }|S )N      ?i  )rO   r"   ZnanmaxZnanminZlinspacer   )r   r/   Zsample_rangerO   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)rN   r0   )Zscipy.statsrR   r	   evaluater   r5   )r-   r.   r/   r0   rN   rO   r1   r2   r#   rR   Zgkdelinesr   r   r   r5      s    
zKdePlot._plotc                 C  s   | j |d< | ||d< |S )NrN   rO   )rN   rQ   r?   r   r   r   r:      s    
zKdePlot._make_plot_keywordsc                 C  s   | d d S )NZDensity)rB   rC   r   r   r   rD      s    zKdePlot._post_plot_logic)NN)NNNNN)rG   rH   rI   rJ   rA   r   r(   rQ   rK   r5   r:   rD   r   r   r   r   rM      s   
     rM   Tc                 K  s   |dkrt d||}|d k	r*|| }t|}t|||||
|d\}}t|}t|D ]F\}\}}|| }
|rt|tr| }| ||
f| |
	t
| qZ||fS )NdefaultzNfigsize='default' is no longer supported. Specify figure size by tuple instead)naxesfigsizesharexshareyr.   layout)
ValueErrorgroupbyr+   r   r   r8   
isinstancer   r!   	set_titler
   )Zplotfr   columnbyZnumeric_onlyrW   rX   rY   rZ   rotr.   r   ZgroupedrV   figaxes_axesr=   keygroupr   r   r   _grouped_plot   s0    
     
rg   2   FZ   c                   s   rBdkst | jdkr&| jd< n|dkr:| jd< n|d<  fdd}|dkr^|	}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 : int, default 90
    grid : bool, default True
    legend: : bool, default False
    kwargs : dict, keyword arguments passed to matplotlib.Axes.hist

    Returns
    -------
    collection of Matplotlib Axes
    r*   r)   Nc                   s,   |j |  jfd i r(|  d S )Nr   )r   dropnar&   legend)rf   r.   r   r   rk   r   r   
plot_group   s    z!_grouped_hist.<locals>.plot_group)r_   r`   rX   rY   r.   rW   rZ   ra   
xlabelsizexrot
ylabelsizeyrotg333333?g?g?rP   333333?)r   topleftrighthspacewspace)AssertionErrorr;   namecolumnsrg   r   r   )r   r_   r`   r.   r   rW   rZ   rX   rY   ra   gridro   rp   rq   rr   rk   r   rm   rb   rc   r   rl   r   _grouped_hist   sN    *

          r}   r   bool)rk   c                 K  s  dd l m} |
r d|kr td|d kr|dd d k	rBtd|d| rX| n
|j|d}|d k	rt|t|	 kr|j
|dd	i |d kr| }n| |krtd
|  j}|
r| j|d< |j|fd|	i| |
r|  || t|g}t|||||d n8d|kr.tdt| f|||||	|||||
d
|}t|dr|jdkrt|dkr|d S |S )Nr   r*    Cannot use both legend and labelrZ   z7The 'layout' keyword is not supported when 'by' is Nonefigure)rW   ZforwardTz&passed axis not bound to passed figurer   rn   z`Cannot pass 'figure' when using the 'by' argument, since a new 'Figure' instance will be created)
r`   r.   r|   rW   r   ro   rp   rq   rr   rk   r;   r)   )Zmatplotlib.pyplotZpyplotr[   r$   popZget_fignumsZgcfr   tupleZget_size_inchesZset_size_inchesZgcaZ
get_figurery   rj   r&   rz   r   rk   r|   r"   r%   r   r}   hasattrr;   r+   )r   r`   r.   r|   ro   rp   rq   rr   rW   r   rk   r#   Zpltrb   r&   rc   r   r   r   hist_series?  sn    
 



    
r   c                 K  s`  |rd|krt d|d k	rNt| f||||||	|
|||||||d|}|S |d k	rvt|ttjtfsn|g}| | } | jtjddfdd} t	| j
}|dkrt d	t||d
|	|
||d\}}t|}d|k}t| j
D ]`\}}|| }|r|r||d< |j| |  jfd|i| || || |r|  qt|||||d t|ddd |S )Nr*   r   )r_   r`   r.   r|   rW   rX   rY   rZ   r   ro   rp   rq   rr   rk   Z
datetime64Z
datetimetz	timedelta)includeexcluder   zDhist method requires numerical or datetime columns, nothing to plot.F)rV   r.   ZsqueezerX   rY   rW   rZ   r   rn   rs   )rx   rw   )r[   r}   r]   listr"   Zndarrayr   Zselect_dtypesnumberr+   r{   r   r   r8   r   rj   r&   r^   r|   rk   r   r   )r   r_   r`   r|   ro   rp   rq   rr   r.   rX   rY   rW   rZ   r   rk   r#   rc   rV   rb   rd   Zcan_set_labelr=   colr   r   r   
hist_frame  s    
 

	 


    r   )	NNTNTTNr   N)NNNrh   NNFFri   TNNNNF)
NNTNNNNNr   F)NNTNNNNNFFNNr   F)!
__future__r   typingr   Znumpyr"   Zpandas.core.dtypes.commonr   r   Zpandas.core.dtypes.genericr   r   Zpandas.core.dtypes.missingr   r	   Zpandas.io.formats.printingr
   Z pandas.plotting._matplotlib.corer   r   Z!pandas.plotting._matplotlib.toolsr   r   r   r   Zmatplotlib.axesr   r   rM   rg   r}   r   r   r   r   r   r   <module>   s   `A         
-               
T          J              