
    *gA                       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+	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ-	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ.	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ/y)     )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y)HistPlotc                     y)Nhist selfs    j/var/www/html/articles-backend/trend/venv/lib/python3.12/site-packages/pandas/plotting/_matplotlib/hist.py_kindzHistPlot._kind7   s        N)rangeweightsc                   t        |      rt        j                  |      }|| _        || _        || _        |j                  d      | _        |j                  d      | _        t        j                  | |fi | | j                  |      | _        y )Nxlabelylabel)r	   nparraybottom
_bin_ranger(   getr*   r+   r   __init___adjust_binsbins)r#   datar3   r.   r'   r(   kwargss          r$   r1   zHistPlot.__init__;   sv     XXf%Fjj*jj*t.v.%%d+	r&   c                >   t        |      r| j                  ct        | j                        }| j                  j	                  |      | j
                     }|D cg c]  \  }}| j                  ||       }}}|S | j                  | j                  |      }|S c c}}w N)r   byr   r4   groupbycolumns_calculate_bins)r#   r3   by_modifiedgroupedkeygroups         r$   r2   zHistPlot._adjust_binsS   s    dww"4TWW=))++K8FLSTjc5,,UD9TT  ++DIIt< Us   Bc                    |j                  d      j                         }t        j                  |      }|t	        |          }t        j
                  ||| j                        \  }}|S )zCalculate bins given dataF)copy)r3   r'   )infer_objects_get_numeric_datar,   ravelr   	histogramr/   )r#   r4   r3   	nd_valuesvaluesr    s         r$   r;   zHistPlot._calculate_bins]   s[    &&E&2DDF	)$f&\\&t4??K
dr&   c                  |dk(  r| j                  ||t        |      dz
         t        j                  t        |      dz
        }	|| j	                  |||	|d         z   } |j
                  |f||d|\  }
}}| j                  |||
       |S )Nr      label)r3   r.   )_initialize_stackerlenr,   zeros_get_stacked_valuesr    _update_stacker)clsaxystyler.   
column_numstacking_idr3   kwdsbasenpatchess               r$   _plotzHistPlot._plotg   s     ?##BSY]CxxD	A&#11"k4gWW"2771G4G$G4BQ/r&   c                   | j                         }| j                         }| j                   t        | j                  | j
                        n| j                  }t        | j                  |            D ]v  \  }\  }}| j                  |      }| j                  j                         }	| j                  | j                  |	d<   t        |      }| j                  ||      }||	d<   | j                  ||	||      \  }
}	|
|
|	d<   | j                  |	|       | j                  +|	d   |   |	d<   | j                   |	d<   |	j#                  d       | j$                  )t'        |       j)                  | j$                  ||      |	d<   t+        || j                        } | j,                  ||f||d|	}| j                  |j/                  t        |             | j1                  |d	   |       y y )
N)r4   color)indexrJ   rS   r3   r(   )rT   rU   r   )_get_colors_get_stacking_idr8   r   r4   r%   	enumerate
_iter_data_get_axrV   rA   r\   r   _mark_right_label_apply_style_colors_make_plot_keywordsr:   popr(   type_get_column_weightsr   rZ   	set_title_append_legend_handles_labels)r#   figcolorsrU   r4   irJ   rR   rQ   rV   rS   artistss               r$   
_make_plotzHistPlot._make_plot~   s   !!#++-
 ww" &dii< 	 'tD'AB #	BMAzqaB99>>#Dzz% $

W 'E**5*:E!DM2264EJKE4  %W$$T1- ww"#F|AV $W!||'"&t*"@"@qRS"TY(DGG4A djjQV1+VQUVG ww"\%01..wqz5AG#	Br&   c                @    | j                   |d<   | j                  |d<   y)z/merge BoxPlot/KdePlot properties to passed kwdsr.   r3   N)r.   r3   r#   rV   rR   s      r$   re   zHistPlot._make_plot_keywords   s     XyyVr&   c                    | Lt        j                  |       dk7  r%t        j                  |       d   dk7  r
	 | d d |f   } | t        |          } | S # t        $ r}t	        d      |d }~ww xY w)NrI   z?weights must have the same shape as data, or be a single column)r,   ndimshape
IndexError
ValueErrorr   )r(   rm   rR   errs       r$   rh   zHistPlot._get_column_weights   s     www1$'):2)>!)C%admG tAwh'G " $0 s   	A 	A+A&&A+c                4   | j                   dk(  rE|j                  | j                  dn| j                         |j                  | j                         y |j                  | j                         |j                  | j                  dn| j                         y )N
horizontal	Frequency)orientation
set_xlabelr*   
set_ylabelr+   r#   rQ   r4   s      r$   _post_plot_logiczHistPlot._post_plot_logic   sx    |+ MM;;& [[
 MM$++&MM$++&MM;;& [[r&   c                D    | j                   j                  dd       dk(  ryy)Nr|   rz   vertical)rV   r0   r"   s    r$   r|   zHistPlot.orientation   s    99==-=r&   )returnzLiteral['hist', 'kde'])
   r   )r3   #int | np.ndarray | list[np.ndarray]r.   int | np.ndarrayr   None)r3   r   )r4   Series | DataFramer   
np.ndarray)Nr   r   N)rQ   r   rR   r   r.   r   rT   int)rk   r   r   r   rV   zdict[str, Any]rR   r   r   r   )rm   r   rQ   r   r   r   )r   r   )__name__
__module____qualname__propertyr%   r1   r2   r;   classmethodrZ   ro   re   r   staticmethodrh   r   r|   r!   r&   r$   r   r   6   s      57#$	, , 2, !	, 
,0 
 #$ 
 !  ,0Bd!    $  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y)KdePlotc                     y)Nkder!   r"   s    r$   r%   zKdePlot._kind   s    r&   c                     y)Nr   r!   r"   s    r$   r|   zKdePlot.orientation   s    r&   N)r(   c               \    t        j                  | |fi | || _        || _        || _        y r7   )r   r1   	bw_methodindr(   )r#   r4   r   r   r(   r5   s         r$   r1   zKdePlot.__init__   s.     	t.v."r&   c                   |vt        j                  |       t        j                  |       z
  }t        j                  t        j                  |       d|z  z
  t        j                  |       d|z  z   d      }|S t	        |      rtt        j                  |       t        j                  |       z
  }t        j                  t        j                  |       d|z  z
  t        j                  |       d|z  z   |      }|S )N      ?i  )r,   nanmaxnanminlinspacer   )rR   r   sample_ranges      r$   _get_indzKdePlot._get_ind   s    ;99Q<"))A,6L++		!s\11		!s\11C 
 _99Q<"))A,6L++		!s\11		!s\11C
 
r&   c                    ddl m}	 t        |      } |	||      }
|
j                  |      }t	        j
                  |||fd|i|}|S )Nr   )gaussian_kde)r   rS   )scipy.statsr   r   evaluater   rZ   )rP   rQ   rR   rS   r   r   rT   rU   rV   r   gkdeliness               r$   rZ   zKdePlot._plot  sL     	-"A3MM#b#q>>>r&   c                t    | j                   |d<   t        |       j                  || j                        |d<   y )Nr   )r   r   )r   rg   r   r   rq   s      r$   re   zKdePlot._make_plot_keywords  s1     NN[4j))!):Ur&   c                &    |j                  d       y )NDensity)r~   r   s      r$   r   zKdePlot._post_plot_logic!  s    
i r&   )r   zLiteral['kde'])r   zLiteral['vertical'])NNr   r   )rR   r   )NNNNN)rQ   r   rR   r   rU   
int | Noner   r   )r   r   r   r   r%   r|   r1   r   r   r   rZ   re   r   r!   r&   r$   r   r      s        )-9=	  $  "&    (;!r&   r   c                p   |dk(  rt        d      |j                  |      }|||   }t        |      }t        |||||
|      \  }}t	        |      }t        |      D ]S  \  }\  }}||   }
|r t        |t              r|j                         } | ||
fi | |
j                  t        |             U ||fS )NdefaultzNfigsize='default' is no longer supported. Specify figure size by tuple instead)naxesfigsizesharexshareyrQ   layout)rw   r9   rL   r   r   r`   
isinstancer
   rC   ri   r   )plotfr4   columnr8   numeric_onlyr   r   r   r   rotrQ   r5   r=   r   rk   axes_axesrm   r>   r?   s                       r$   _grouped_plotr   %  s      )3
 	

 ll2G&/LEWVFrRXIC E$W- (<C1XJul;++-EeR"6"
\#&'( 9r&   c                   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
    rJ   rI   c                     |j                   | j                         j                  fdi r|j                          y y )Nr3   )r    dropnarG   legend)r?   rQ   r3   r5   r   s     r$   
plot_groupz!_grouped_hist.<locals>.plot_group  s8    %%;D;F;IIK r&   )r   r8   r   r   rQ   r   r   r   
xlabelsizexrot
ylabelsizeyrotg333333?g?g?r   333333?)r.   topleftrighthspacewspacer   )rt   namer:   r   r   r   )r4   r   r8   rQ   r3   r   r   r   r   r   gridr   r   r   r   r   r5   r   rk   r   s       `          ``   r$   _grouped_histr   Q  s    T f$$$99>"iiF7O^"llF7O$F7O
 |IC $:D Dc3s3 Kr&   c                   dd l m} |
rd|v rt        d      |S|j                  dd       t        d      |j	                  d|j                         r|j                         n|j                  |            }|7t        |      t        |j                               k7  r |j                  |dd	i ||j                         }n|j                         |k7  rt        d
      | j                         j                  }|
r| j                   |d<    |j"                  |fd|	i| |
r|j%                          |j'                  |       t)        j*                  |g      }t-        |||||       n&d|v rt        d      t/        | f|||||	|||||
d
|}t1        |d      r"|j2                  dk(  rt5        |      dk(  r|d   S |S )Nr   rJ    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 figurer3   r   z`Cannot pass 'figure' when using the 'by' argument, since a new 'Figure' instance will be created)
r8   rQ   r   r   r3   r   r   r   r   r   rt   rI   )matplotlib.pyplotpyplotrw   r0   rf   get_fignumsgcfr   tupleget_size_inchesset_size_inchesgca
get_figureAssertionErrorr   rG   r   r    r   r   r,   r-   r   r   hasattrrt   rL   )r#   r8   rQ   r   r   r   r   r   r   r3   r   rV   pltrk   rG   r   s                   r$   hist_seriesr     s    $'T/;<<	z88Hd#/VWWhh3??#4cggi#**W*:U
 5>U3;N;N;P5Q#QC7$7:B]]_# !IJJ%% IIDM*T*T*IIK
xx~ 	!!	
 tO  
!!
 
 tV99>c$i1n7NKr&   c                   |rd|v rt        d      |t        | f||||||	|
|||||||d|}|S |-t        |t        t        j
                  t        f      s|g}| |   } | j                  t        j                  ddfd      } t        | j                        }|dk(  rt        d	      t        ||d
|	|
||      \  }}t        |      }d|v}t        | j                        D ]x  \  }}||   }|r|r||d<    |j                  | |   j                         j                   fd|i| |j#                  |       |j%                  |       |si|j'                          z t)        |||||       t+        |dd       |S )NrJ   r   )r   r8   rQ   r   r   r   r   r   r3   r   r   r   r   r   
datetime64
datetimetz	timedelta)includeexcluder   zDhist method requires numerical or datetime columns, nothing to plot.F)r   rQ   squeezer   r   r   r   r3   r   r   )r   r   )rw   r   r   listr,   ndarrayr   select_dtypesnumberrL   r:   r   r   r`   r    r   rG   ri   r   r   r   r   )r4   r   r8   r   r   r   r   r   rQ   r   r   r   r   r3   r   rV   r   r   rk   r   can_set_labelrm   cols                          r$   
hist_framer     s   $ 'T/;<<	~
!!
  !
$ &4X">?XFF|L,7  D EzR
 	
  IC E4'MDLL) 31XmDMS	  "))===
S
IIK $:D C4Kr&   )	NNTNTTNr   N)r4   r   r   boolr   tuple[float, float] | Noner   r   r   r   r   float)NNN2   NNFFZ   TNNNNF)r4   r   r3   r   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   r3   r   r   r   )NNTNNNNNFFNNr   F)r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   )0
__future__r   typingr   r   r   r   numpyr,   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     sz   "  
 4 D  $(2ix iX@!h @!L *.)
)
 ) () ) ) 
)\ *.!	!	!O
O
 O (O O O 
O O O O  !Oh !	!	*.K
K 	K
 K K (K K K` !	!	*.T
T 	T
 T T T T (T T Tr&   