o
    EhG                     @  s  d dl mZ d dlmZmZmZ d dlZd dlZd dl	m
Z
 d dlZd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlZd dlm  mZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z- erd dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d9ddZ8G d d! d!e$Z9d:d"d#Z:			$	%				d;d<d*d+Z;					 	$			d=d>d0d1Z<					 	$			d=d>d2d3Z=	$			 	$				%	$d?d@d7d8Z>dS )A    )annotations)TYPE_CHECKINGLiteral
NamedTupleN)setp)lib)cache_readonly)find_stack_level)is_dict_like)	ABCSeriesremove_na_arraylike)Versionpprint_thing)LinePlotMPLPlot)create_iter_data_given_by)get_standard_colors)create_subplotsflatten_axesmaybe_adjust_figure)
Collection)Axes)Figure)Line2D)MatplotlibColoraxr   labels	list[str]is_verticalboolreturnNonec                 K  s   |r|   n|  }t|t|kr2tt|t|\}}ttjtdk r.|dks.J |||9 }|r?| j|fi | dS | j|fi | dS )zSet the tick labels of a given axis.

    Due to https://github.com/matplotlib/matplotlib/pull/17266, we need to handle the
    case of repeated ticks (due to `FixedLocator`) and thus we duplicate the number of
    labels.
    z3.10r   N)	Z
get_xticksZ
get_ytickslendivmodr   mpl__version__Zset_xticklabelsZset_yticklabels)r   r   r    kwargsZticksiZ	remainder r*   Clib/python3.10/site-packages/pandas/plotting/_matplotlib/boxplot.py_set_ticklabels1   s   r,   c                      s   e Zd Zed6ddZdZdZG dd deZd7d8ddZ	e
		d9d:ddZdd Zedd Zedd Zedd Zedd Zed d! Z		"d;d<d%d&Zd=d'd(Zd>d+d,Zd=d-d.Zd?d/d0Zed@d2d3Ze fd4d5Z  ZS )ABoxPlotr"   Literal['box']c                 C  s   dS )NZboxr*   selfr*   r*   r+   _kindE   s   zBoxPlot._kind
horizontal)Naxesdictbothc                   @  s   e Zd ZU ded< ded< dS )z
BoxPlot.BPr   r   zdict[str, list[Line2D]]linesN)__name__
__module____qualname____annotations__r*   r*   r*   r+   BPM   s   
 r;   r3   return_typestrr#   c                 K  sT   || j vr	td|| _tj| |fi | | jr(| jdkr#d| _d S d| _d S d S )Nz2return_type must be {None, 'axes', 'dict', 'both'}verticalF)	_valid_return_types
ValueErrorr<   r   __init__subplotsorientationsharexsharey)r0   datar<   r(   r*   r*   r+   rA   R   s   



zBoxPlot.__init__Nr   r   y
np.ndarrayc                 K  st   |j dkrdd |D }dd |D }nt|}|j|fi |}|dkr)||fS |dkr6| j||d|fS ||fS )N   c                 S     g | ]}t |qS r*   r   .0vr*   r*   r+   
<listcomp>i       z!BoxPlot._plot.<locals>.<listcomp>c                 S  s(   g | ]}|j d kr|nttjgqS )r   )sizenpZarraynanrK   r*   r*   r+   rN   m   s   ( r4   r5   r   r6   )ndimr   boxplotr;   )clsr   rG   
column_numr<   kwdsZysbpr*   r*   r+   _plotc   s   
zBoxPlot._plotc                 C  sb   |t ju rd S |d urtjdt d t|tr/g d}|D ]}||vr.td| d| q|S )NzC'color' and 'colormap' cannot be used simultaneously. Using 'color')
stacklevelboxeswhiskersmedianscaps!color dict contains invalid key ''. The key must be either )r   Z
no_defaultwarningswarnr	   
isinstancer4   r@   )r0   colorcolormap
valid_keyskeyr*   r*   r+   _validate_color_argsy   s$   

zBoxPlot._validate_color_argsc                 C  s   t d| jd dS )N   )
num_colorsrg   rf   )r   rg   r/   r*   r*   r+   _color_attrs   s   zBoxPlot._color_attrsc                 C  
   | j d S Nr   rm   r/   r*   r*   r+   _boxes_c      
zBoxPlot._boxes_cc                 C  rn   ro   rp   r/   r*   r*   r+   _whiskers_c   rr   zBoxPlot._whiskers_cc                 C  rn   )NrI   rp   r/   r*   r*   r+   
_medians_c   rr   zBoxPlot._medians_cc                 C  rn   ro   rp   r/   r*   r*   r+   _caps_c   rr   zBoxPlot._caps_crf   
color_kwdsQdict[str, MatplotlibColor] | MatplotlibColor | Collection[MatplotlibColor] | Nonec                 C     d S Nr*   )r0   rl   rv   r*   r*   r+   _get_colors   s   zBoxPlot._get_colorsc                 C  s   t | jtr'| jd| j}| jd| j}| jd| j}| jd| j}n| jp,| j}| jp2| j}| jp8| j}| jp>| j}||||f}t|fd|i| j	 d S )Nr]   r^   r_   r`   	color_tup)
re   rf   r4   getrq   rs   rt   ru   maybe_color_bprX   )r0   rY   r]   r^   r_   r`   r{   r*   r*   r+   r}      s   zBoxPlot.maybe_color_bpfigr   c                 C  s  | j r{tjtd| _| jd urt| j| jn| j}t	| j
|dD ]W\}\}}| |}| j }| jd urO|j}|t| | jjj}dd |d D }	nt|g}	| j||f|| jd|\}
}| | |
| j|< t||	| jdkd q!d S | jjj}| d}| j }| j||fd| jd|\}
}| | |
| _d	d | jjD }| jsd
d tt|D }t||| jdkd d S )NZdtype)rF   c                 S  rJ   r*   r   )rL   colr*   r*   r+   rN      rO   z&BoxPlot._make_plot.<locals>.<listcomp>r   )rW   r<   r>   )r   r   r    c                 S  rJ   r*   r   )rL   leftr*   r*   r+   rN      rO   c                 S  rJ   r*   r   )rL   ri   r*   r*   r+   rN      rO   )rB   pdSeriesobject_return_objbyr   rF   r1   	enumerateZ
_iter_dataZ_get_axrX   copyT	set_titler   columnslevelsrZ   r<   r}   r,   rC   valuesZ	use_indexranger$   )r0   r~   rF   r)   ZlabelrG   r   rX   r   Z
ticklabelsretrY   r   r*   r*   r+   
_make_plot   s\   
	













zBoxPlot._make_plotc                 C  rx   ry   r*   r/   r*   r*   r+   _make_legend   s   zBoxPlot._make_legendc                 C  s4   | j r|t| j  | jr|t| j d S d S ry   )xlabel
set_xlabelr   ylabel
set_ylabel)r0   r   rF   r*   r*   r+   _post_plot_logic   s
   zBoxPlot._post_plot_logic!Literal['horizontal', 'vertical']c                 C  s   | j ddr	dS dS )NvertTr>   r2   )rX   r|   r/   r*   r*   r+   rC     s   zBoxPlot.orientationc                   s   | j d u r	t jS | jS ry   )r<   superresultr   r/   	__class__r*   r+   r     s   
zBoxPlot.result)r"   r.   )r3   )r<   r=   r"   r#   )Nr3   )r   r   rG   rH   r<   r=   )Nrf   )rv   rw   r"   r#   r"   r#   )r~   r   r"   r#   )r   r   r"   r#   )r"   r   )r7   r8   r9   propertyr1   Z_layout_typer?   r   r;   rA   classmethodrZ   rj   r   rm   rq   rs   rt   ru   rz   r}   r   r   r   rC   r   __classcell__r*   r*   r   r+   r-   D   s@    








:
r-   c                 K  s   | dst| d |d dd | ds t| d |d dd | ds0t| d	 |d
 dd | dsBt| d |d dd d S d S )NZboxpropsr]   r      )rf   ZalphaZwhiskerpropsr^   Zmedianpropsr_   rI   Zcappropsr`   rk   )r|   r   )rY   r{   rX   r*   r*   r+   r}     s   



r}   TFnumeric_onlygridfigsizetuple[float, float] | Nonec
                 K  sp  |j |dd}|d u rt|ttfs|g}| j|}t|}t||
	dd|
	dd|||d\}}t
|}|
	dd |
	dd }}|
d	drQ|pO|}n|pT|}g }t|D ].\}}|| }|| }t| \}}| |||f||d
|
}|| || || q[tj||dd}|	d u r|}t|dkr|d n|}|d|  t|dddddd |S )NF)ZobservedrD   TrE   )naxesrD   rE   r   r   layoutr   r   r   )r   r   )indexr   r   r   zBoxplot grouped by 333333??皙?皙?Zbottomtopr   rightZwspace)groupbyre   listtuple_get_numeric_datar   
differencer$   r   popr   r|   r   zipr   appendr   r   r   Zsuptitler   )ZplotfrF   r   r   r   r   r   r   r   r<   r(   groupedr   r~   r3   Z_axesr   r   Z	ax_valuesr)   r   Zgp_colkeysr   Zre_plotfr   Zbyliner*   r*   r+   _grouped_plot_by_column!  sF   


	


r   fontsize
int | Nonerotintc
              
     s|  dd l m} tjvrtdt| tr| d} d}fdd}d fdd	}|  |d u r5d }nt|tt	fr?|}n|g}|d urYt
|| f||||||d
}|S d u r_d|d urgtd|d u r|d ursd|ini }|| | }W d    n1 sw   Y  |  } t| j}|dkrtd|d u r| j}n| | } ||| jj|fi }|| |S )Nr   z,return_type must be {'axes', 'dict', 'both'}xc                    s   t dd} t| g d} t| d}  dd }|rPt|rKg d}tt|td}|	 D ]\}}||v r?|| || < q0t
d| d	| | S | | | S )
Nrk   )rl   )r   r   rI   krf   r\      ra   rb   )r   rQ   Ztaker   r   r
   r4   r   r   itemsr@   fill)r   colorsrh   Zkey_to_indexri   value)rX   r*   r+   rz   u  s&   

zboxplot.<locals>._get_colorsr   r   c                   s   | dd | dd }}|r|t| |r|t| dd | D } dd |D }|j|fi |}d urA|jdd t|| |dd	d
 t|fd i| dkr]|S dkrht	j
||dS |S )Nr   r   c                 S  rJ   r*   r   )rL   r   r*   r*   r+   rN     rO   z/boxplot.<locals>.plot_group.<locals>.<listcomp>c                 S  s   g | ]}t jt|td qS )r   )rQ   Zasarrayr   r   rK   r*   r*   r+   rN     s    r5   )axisZ	labelsizer   T)r   r   r    Zrotationr{   r4   rS   )r   r   r   r   rU   Ztick_paramsr,   r|   r}   r-   r;   )r   r   r   rX   r   r   rY   )r   r   r<   r   r*   r+   
plot_group  s&   zboxplot.<locals>.plot_group)r   r   r   r   r   r   r<   r3   z7The 'layout' keyword is not supported when 'by' is Nonezfigure.figsizez;boxplot method requires numerical columns, nothing to plot.)r   r   )matplotlib.pyplotpyplotr-   r?   r@   re   r   Zto_framer   r   r   Z
rc_contextZgcar   r$   r   r   r   r   )rF   columnr   r   r   r   r   r   r   r<   rX   pltrz   r   r   r   Zrcr   r*   )r   r   rX   r<   r   r+   rU   ^  sf   



$


rU   c
                 K  s<   dd l m} t| f|||||||||	d	|
}|  |S )Nr   )	r   r   r   r   r   r   r   r   r<   )r   r   rU   Zdraw_if_interactive)r0   r   r   r   r   r   r   r   r   r<   rX   r   r*   r*   r+   boxplot_frame  s$   r   rB   rD   rE   c              
   K  sF  |du rQt | }t|d||	|
||d\}}t|}tjtd}t| |D ] \\}}}|jd|||||d|}|t	| ||j
|< q$t|ddddd	d
 |S t|  \}}| jdkretj||dd}nt |dkrw|d |dd  }n|d }|d urt|}tj||g}t|j}|jd|||||||d|}|S )NTF)r   Zsqueezer   rD   rE   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   r   r*   )r$   r   r   r   r   r   r   rU   r   r   locr   r   concatjoincomZconvert_to_list_likeZ
MultiIndexZfrom_productr   r   )r   rB   r   r   r   r   r   r   r   rD   rE   rX   r   r~   r3   r   ri   groupdr   ZframesZdfZ	multi_keyr*   r*   r+   boxplot_frame_groupby   sZ   
	




r   )r   r   r   r   r    r!   r"   r#   r   )NNTFNNNN)r   r!   r   r!   r   r   )	NNNNr   TNNN)r   r   r   r   r   r!   r   r   )
TNNr   TNNNFT)rB   r!   r   r   r   r   r   r!   r   r   rD   r!   rE   r!   )?Z
__future__r   typingr   r   r   rc   Z
matplotlibr&   Zmatplotlib.artistr   ZnumpyrQ   Zpandas._libsr   Zpandas.util._decoratorsr   Zpandas.util._exceptionsr	   Zpandas.core.dtypes.commonr
   Zpandas.core.dtypes.genericr   Zpandas.core.dtypes.missingr   Zpandasr   Zpandas.core.commoncorecommonr   Zpandas.util.versionr   Zpandas.io.formats.printingr   Z pandas.plotting._matplotlib.corer   r   Z#pandas.plotting._matplotlib.groupbyr   Z!pandas.plotting._matplotlib.styler   Z!pandas.plotting._matplotlib.toolsr   r   r   Zcollections.abcr   Zmatplotlib.axesr   Zmatplotlib.figurer   Zmatplotlib.linesr   Zpandas._typingr   r,   r-   r}   r   rU   r   r   r*   r*   r*   r+   <module>   s    
 
Q? "