
    cMhA                       d dl mZ d dlmZmZmZ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 d d
lmZ d dlmZmZmZm Z  erd dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z)  G d de          Z* G d de*          Z+	 	 	 	 	 	 	 	 	 d1d2dZ,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d4d*Z-	 	 	 	 	 	 	 	 	 	 d5d6d.Z.	 	 	 	 	 	 	 	 	 	 	 	 	 	 d7d8d0Z/dS )9    )annotations)TYPE_CHECKINGAnyLiteralfinalN)
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)Figure)PlottingOrientation)	DataFrameSeriesc                      e Zd Zed$d            Z	 	 d%dddd&dZd'dZd(dZe	 	 	 	 d)d*d            Z	d+dZ
d,dZeed-d                         Zd.d!Zed/d#            ZdS )0HistPlotreturnLiteral['hist', 'kde']c                    dS )Nhist selfs    `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/plotting/_matplotlib/hist.py_kindzHistPlot._kind7   s    v    
   r   N)rangeweightsbins#int | np.ndarray | list[np.ndarray]bottomint | np.ndarrayNonec               8   t          |          rt          j        |          }|| _        || _        || _        |                    d          | _        |                    d          | _        t          j
        | |fi | |                     |          | _        d S )Nxlabelylabel)r	   nparrayr.   
_bin_ranger+   getr2   r3   r   __init___adjust_binsr,   )r%   datar,   r.   r*   r+   kwargss          r&   r8   zHistPlot.__init__;   s      	&Xf%%Fjj**jj**t..v...%%d++			r(   c                     t                    rk j        It           j                  } j                            |           j                 } fd|D             n                      j                  S )Nc                B    g | ]\  }}                     |          S r#   )_calculate_bins).0keygroupr,   r%   s      r&   
<listcomp>z)HistPlot._adjust_bins.<locals>.<listcomp>X   s-    TTTjc5,,UD99TTTr(   )r   byr   r:   groupbycolumnsr>   )r%   r,   by_modifiedgroupeds   ``  r&   r9   zHistPlot._adjust_binsS   s    d 	=w"4TW==)++K88FTTTTTGTTT++DIt<<r(   r:   Series | DataFrame
np.ndarrayc                    |                     d                                          }t          j        |          }|t	          |                    }t          j        ||| j                  \  }}|S )zCalculate bins given dataF)copy)r,   r*   )infer_objects_get_numeric_datar4   ravelr   	histogramr6   )r%   r:   r,   	nd_valuesvaluesr"   s         r&   r>   zHistPlot._calculate_bins]   sf    &&E&22DDFF	)$$f&\&t4?KKK
dr(   axr   y
column_numintc               B   |dk    r'|                      ||t          |          dz
             t          j        t          |          dz
            }	||                     |||	|d                   z   } |j        |f||d|\  }
}}|                     |||
           |S )Nr      label)r,   r.   )_initialize_stackerlenr4   zeros_get_stacked_valuesr"   _update_stacker)clsrR   rS   styler.   rT   stacking_idr,   kwdsbasenpatchess               r&   _plotzHistPlot._plotg   s     ??##BSYY]CCCxD		A&&#11"k4gWWW"271G4GG$GG4BQ///r(   figr   c                   |                                  }|                                 }| j        t          | j        | j                  n| j        }t          |                     |                    D ]\  }\  }}|                     |          }| j	        
                                }	| j        
| j        |	d<   t          |          }|                     ||          }||	d<   |                     ||	||          \  }
}	|
|
|	d<   |                     |	|           | j        0|	d         |         |	d<   | j        |	d<   |	                    d           | j        ,t'          |                               | j        ||          |	d<   t+          || j                  } | j        ||f||d|	}| j        "|                    t          |                     |                     |d	         |           d S )
N)r:   color)indexrX   r_   r,   r+   )rT   r`   r   )_get_colors_get_stacking_idrC   r   r:   r'   	enumerate
_iter_data_get_axra   rK   rh   r   _mark_right_label_apply_style_colors_make_plot_keywordsrE   popr+   type_get_column_weightsr   re   	set_title_append_legend_handles_labels)r%   rf   colorsr`   r:   irX   rS   rR   ra   r_   artistss               r&   
_make_plotzHistPlot._make_plot~   s   !!##++--
 w" &di<<< 	 'tD'A'ABB #	B #	BMAzqaB9>>##Dz% $
W ''E**5*::E!DM2264EJJKE4  %W$$T1--- w"#F|AV $W!!!|'"&t**"@"@qRS"T"TY(DG44A djQV1+VVQUVVG w"\%00111..wqz5AAAAG#	B #	Br(   ra   dict[str, Any]c                .    | j         |d<   | j        |d<   dS )z/merge BoxPlot/KdePlot properties to passed kwdsr.   r,   N)r.   r,   r%   ra   rS   s      r&   rq   zHistPlot._make_plot_keywords   s     XyVr(   rx   c                   | |t          j        |           dk    rNt          j        |           d         dk    r0	 | d d |f         } n"# t          $ r}t	          d          |d }~ww xY w| t          |                    } | S )NrW   z?weights must have the same shape as data, or be a single column)r4   ndimshape
IndexError
ValueErrorr   )r+   rx   rS   errs       r&   rt   zHistPlot._get_column_weights   s     ww1$$'):):2)>!)C)C%aaadmGG!   $0  
 tAwwh'Gs   A 
A&A!!A&c                   | j         dk    r?|                    | j        dn| j                   |                    | j                   d S |                    | j                   |                    | j        dn| j                   d S )N
horizontal	Frequency)orientation
set_xlabelr2   
set_ylabelr3   r%   rR   r:   s      r&   _post_plot_logiczHistPlot._post_plot_logic   s    |++ MM;& [  
 MM$+&&&&&MM$+&&&MM;& [    r(   r   c                H    | j                             dd           dk    rdS dS )Nr   r   vertical)ra   r7   r$   s    r&   r   zHistPlot.orientation   s'    9==--==<:r(   )r   r    )r)   r   )r,   r-   r.   r/   r   r0   )r,   r-   )r:   rH   r   rI   )Nr   r   N)rR   r   rS   rI   r.   r/   rT   rU   )rf   r   r   r0   ra   r{   rS   rI   r   r0   )rx   rU   rR   r   r   r0   )r   r   )__name__
__module____qualname__propertyr'   r8   r9   r>   classmethodre   rz   rq   r   staticmethodrt   r   r   r#   r(   r&   r   r   6   sK          X 57#$	, , , , , , ,0       
 #$    [,0B 0B 0B 0Bd! ! ! !    \ U    $    X  r(   r   c                      e Zd Zedd            Zedd            Z	 ddddd	Zedd            Ze		 	 	 	 	 ddd            Z
ddZddZdS )KdePlotr   Literal['kde']c                    dS )Nkder#   r$   s    r&   r'   zKdePlot._kind   s    ur(   Literal['vertical']c                    dS )Nr   r#   r$   s    r&   r   zKdePlot.orientation   s    zr(   N)r+   r0   c               V    t          j        | |fi | || _        || _        || _        d S )N)r   r8   	bw_methodindr+   )r%   r:   r   r   r+   r;   s         r&   r8   zKdePlot.__init__   s8     	t..v..."r(   rS   rI   c                   |pt          j        |           t          j        |           z
  }t          j        t          j        |           d|z  z
  t          j        |           d|z  z   d          }n~t	          |          rot          j        |           t          j        |           z
  }t          j        t          j        |           d|z  z
  t          j        |           d|z  z   |          }|S )N      ?i  )r4   nanmaxnanminlinspacer   )rS   r   sample_ranges      r&   _get_indzKdePlot._get_ind   s    ;9Q<<")A,,6L+	!s\11	!s\11 CC
 __ 	9Q<<")A,,6L+	!s\11	!s\11 C
 
r(   rR   r   r`   
int | Nonec                    ddl m}	 t          |          } |	||          }
|
                    |          }t	          j        |||fd|i|}|S )Nr   )gaussian_kde)r   r_   )scipy.statsr   r   evaluater   re   )r^   rR   rS   r_   r   r   rT   r`   ra   r   gkdeliness               r&   re   zKdePlot._plot  sm     	-,,,,,""|A333MM#b#q>>>>>r(   ra   r{   c                r    | j         |d<   t          |                               || j                  |d<   d S )Nr   )r   r   )r   rs   r   r   r}   s      r&   rq   zKdePlot._make_plot_keywords  s6     N[4jj))!)::Ur(   c                0    |                     d           d S )NDensity)r   r   s      r&   r   zKdePlot._post_plot_logic!  s    
i     r(   )r   r   )r   r   )NNr   r0   )rS   rI   )NNNNN)rR   r   rS   rI   r`   r   r   r   )r   r   r   r   r'   r   r8   r   r   r   re   rq   r   r#   r(   r&   r   r      s           X    X )-9=         \$  "&    [(; ; ; ;! ! ! ! ! !r(   r   Tr:   rH   numeric_onlyboolfigsizetuple[float, float] | Nonesharexshareyrotfloatc                   |dk    rt          d          |                    |          }|||         }t          |          }t          |||||
|          \  }}t	          |          }t          |          D ]g\  }\  }}||         }
|r)t          |t                    r|                                } | ||
fi | |
	                    t          |                     h||fS )NdefaultzNfigsize='default' is no longer supported. Specify figure size by tuple instead)naxesr   r   r   rR   layout)r   rD   rZ   r   r   rl   
isinstancer
   rM   ru   r   )plotfr:   columnrC   r   r   r   r   r   r   rR   r;   rG   r   rf   axes_axesrx   r@   rA   s                       r&   _grouped_plotr   %  s     )3
 
 	

 ll2G&/LLEWVFrRX  IC E$W-- ( (<C1X 	.Jul;; 	.++--EeR""6"""
\#&&''''9r(   2   FZ   r,   rU   grid
xlabelsizer   
ylabelsizelegendc                   r.dvsJ | j         dk    r| j        d<   n|| j        d<   n|d<   dfd}||	}t          || ||||||||	
  
        \  }}t	          |||||           t          |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
    rX   rW   Nr   r0   c                     |j         |                                 j        fdi r|                                 d S d S )Nr,   )r"   dropnarQ   r   )rA   rR   r,   r;   r   s     r&   
plot_groupz!_grouped_hist.<locals>.plot_group  sP    %;;D;F;;; 	IIKKKKK	 	r(   )r   rC   r   r   rR   r   r   r   r   xrotr   yrotg333333?g?g?r   333333?)r.   topleftrighthspacewspacer   )r   namerE   r   r   r   )r:   r   rC   rR   r,   r   r   r   r   r   r   r   r   r   r   r   r;   r   rf   r   s       `          ``   r&   _grouped_histr   Q  s   T  %f$$$$9>>"iF7OO^"lF7OO$F7O       
 |  IC $:D    Dc3s3    Kr(   r)   r%   r   c                   dd l m} |
rd|v rt          d          ||                    dd           t          d          |                    d|                                r|                                n|                    |                    }|?t          |          t          |	                                          k    r |j
        |dd	i ||                                }n'|                                |k    rt          d
          |                                 j        }|
r
| j        |d<    |j        |fd|	i| |
r|                                 |                    |           t)          j        |g          }t-          |||||           n+d|v rt          d          t/          | f|||||	|||||
d
|}t1          |d          r&|j        dk    rt5          |          dk    r|d         S |S )Nr   rX    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)
rC   rR   r   r   r,   r   r   r   r   r   r   rW   )matplotlib.pyplotpyplotr   r7   rr   get_fignumsgcfr   tupleget_size_inchesset_size_inchesgca
get_figureAssertionErrorr   rQ   r   r"   r   r   r4   r5   r   r   hasattrr   rZ   )r%   rC   rR   r   r   r   r   r   r   r,   r   ra   pltrf   rQ   r   s                   r&   hist_seriesr     s`    $##### ='T//;<<<	z88Hd##/VWWWhh3??#4#4Ucggiii#**W*:U:U
 
 5>>U3;N;N;P;P5Q5Q#Q#QC7$777:BB]]__## !IJJJ% 	& IDM**T*T*** 	IIKKK
x~~ 	!!	
 	
 	
 	
 	
 tO   
!!
 
 
 
 tV 9>>c$ii1nn7NKr(   r   c                F   |rd|v rt          d          |t          | f||||||	|
|||||||d|}|S |2t          |t          t          j        t          f          s|g}| |         } |                     t          j        ddfd          } t          | j
                  }|dk    rt          d	          t          ||d
|	|
||          \  }}t          |          }d|v}t          | j
                  D ]\  }}||         }|r|r||d<    |j        | |                                         j        fd|i| |                    |           |                    |           |r|                                 t)          |||||           t+          |dd           |S )NrX   r   )r   rC   rR   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   rR   squeezer   r   r   r   r,   r   r   )r   r   )r   r   r   listr4   ndarrayr   select_dtypesnumberrZ   rE   r   r   rl   r"   r   rQ   ru   r   r   r   r   )r:   r   rC   r   r   r   r   r   rR   r   r   r   r   r,   r   ra   r   r   rf   r   can_set_labelrx   cols                          r&   
hist_framer     s4   $  ='T//;<<<	~
!!
 
  !
 
$ &4X">?? 	XFF|L,7   D EzzR
 
 	
    IC E4'MDL))  31X 	 m 	 DMS	  "")======
S
 	IIKKK$:D    C4444Kr(   )	NNTNTTNr   N)r:   rH   r   r   r   r   r   r   r   r   r   r   )NNNr   NNFFr   TNNNNF)r:   rH   r,   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )
NNTNNNNNr)   F)r%   r   r   r   r   r   r   r   r   r   r,   rU   r   r   )NNTNNNNNFFNNr)   F)r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   rU   r   r   )0
__future__r   typingr   r   r   r   numpyr4   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   matplotlib.figurer   pandas._typingr   pandasr   r   r   r   r   r   r   r   r#   r(   r&   <module>r     sv   " " " " " "                                    
 4 3 3 3 3 3               D C C C C C             	$$$$$$((((((222222       i i i i ix i i iX@! @! @! @! @!h @! @! @!L *.) ) ) ) )\ *.!	!	!O O O O Oh !	!	*.K K K K K` !	!	*.T T T T T T Tr(   