o
    dD                     @  sz  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	 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Zd dlm  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rwd dl'm(Z( d dl)m*Z* G dd deZ+								d$d%ddZ,					 				d&d'ddZ-					 				d&d'ddZ.				 						d(d)d"d#Z/dS )*    )annotations)TYPE_CHECKING
CollectionLiteral
NamedTupleN)setp)MatplotlibColor)find_stack_level)is_dict_likeremove_na_arraylikepprint_thing)LinePlotMPLPlot)create_iter_data_given_by)get_standard_colors)create_subplotsflatten_axesmaybe_adjust_figure)Axes)Line2Dc                      s   e Zd Zed,ddZdZdZG dd deZd-d.ddZ	d/ddZ
e		d0d1ddZdd Z		d2d3ddZd/ddZd/ddZd4d!d"Zd/d#d$Zd/d%d&Zed5d(d)Ze fd*d+Z  ZS )6BoxPlotreturnLiteral['box']c                 C  s   dS )Nbox selfr   r   h/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/pandas/plotting/_matplotlib/boxplot.py_kind*   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   axzdict[str, list[Line2D]]linesN)__name__
__module____qualname____annotations__r   r   r   r   BP2   s   
 r+   r"   return_typestrNonec                 K  s0   || j vr	td|| _tj| |fi | d S )Nz2return_type must be {None, 'axes', 'dict', 'both'})_valid_return_types
ValueErrorr,   r   __init__)r   datar,   kwargsr   r   r   r1   7   s   
zBoxPlot.__init__c                 C  s(   | j r| jdkrd| _d S d| _d S d S )NverticalF)subplotsorientationsharexshareyr   r   r   r   _args_adjust?   s
   


zBoxPlot._args_adjustNc                 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>N       z!BoxPlot._plot.<locals>.<listcomp>c                 S  s(   g | ]}|j d kr|nttjgqS )r   )sizenparraynanr<   r   r   r   r?   R   s   ( r#   r$   r%   r&   )ndimr   boxplotr+   )clsr%   y
column_numr,   kwdsbpr   r   r   _plotI   s   
zBoxPlot._plotc                 C  s   d| j v r8| jd urtjdt d | j d| _t| jtr7g d}| jD ]}||vr6t	d| d| q&nd | _t
d| jd d}|d	 | _|d	 | _|d
 | _|d	 | _d S )NcolorzC'color' and 'colormap' cannot be used simultaneously. Using 'color')
stacklevelboxeswhiskersmedianscaps!color dict contains invalid key ''. The key must be either    )
num_colorscolormaprN   r   r:   )rK   rY   warningswarnr	   poprN   
isinstancer#   r0   r   _boxes_c_whiskers_c
_medians_c_caps_c)r   
valid_keyskeycolorsr   r   r   _validate_color_args^   s0   





zBoxPlot._validate_color_argsrN   
color_kwdsQdict[str, MatplotlibColor] | MatplotlibColor | Collection[MatplotlibColor] | Nonec                 C     d S Nr   )r   rX   rf   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}| jdsNt	|d |dd | jds]t	|d |dd | jd	slt	|d |dd | jd
s}t	|d |dd d S d S )NrQ   rR   rS   rT   boxprops   rN   alphawhiskerpropsmedianpropscapprops)
r]   rN   r#   getr^   r_   r`   ra   rK   r   )r   rL   rQ   rR   rS   rT   r   r   r   maybe_color_bp   s$   zBoxPlot.maybe_color_bpc                 C  s  | j rutjtd| _| jd urt| j| jn| j}t	| j
|dD ]Q\}\}}| |}| j }| jd urM|j}|t| dd | jjjd D }nt|g}| j||f|| jd|\}}	| |	 || j|< | || q!d S | jjj}| d}| j }| j||fd| jd|\}}	| |	 || _dd | 
 D }
dd |
D }
| jsd	d tt|
D }
| ||
 d S )
Ndtype)r2   c                 S  r;   r   r   )r=   colr   r   r   r?      s    z&BoxPlot._make_plot.<locals>.<listcomp>r   )rJ   r,   c                 S  s   g | ]\}}|qS r   r   )r=   left_r   r   r   r?      r@   c                 S  r;   r   r   )r=   rw   r   r   r   r?      r@   c                 S  r;   r   r   )r=   rc   r   r   r   r?      r@   )r5   pdSeriesobject_return_objbyr   r2   r    	enumerate
_iter_data_get_axrK   copyT	set_titler   columnslevelsrM   r,   rs   _set_ticklabelsvalues	use_indexrangelen)r   r2   ilabelrI   r%   rK   
ticklabelsretrL   labelsr   r   r   
_make_plot   sX   











zBoxPlot._make_plotr%   r   c                 C  s&   | j dkr|| d S || d S )Nr4   )r6   set_xticklabelsset_yticklabels)r   r%   r   r   r   r   r      s   
zBoxPlot._set_ticklabelsc                 C  rh   ri   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 ri   )xlabel
set_xlabelr   ylabel
set_ylabel)r   r%   r2   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vertTr4   r!   )rK   rr   r   r   r   r   r6      s   zBoxPlot.orientationc                   s   | j d u r	t jS | jS ri   )r,   superresultr|   r   	__class__r   r   r      s   
zBoxPlot.result)r   r   )r"   )r,   r-   r   r.   r   r.   )Nr"   )r,   r-   )NrN   )rf   rg   r   r.   )r%   r   r   r.   )r   r   )r'   r(   r)   propertyr    _layout_typer/   r   r+   r1   r9   classmethodrM   re   rj   rs   r   r   r   r   r6   r   __classcell__r   r   r   r   r   )   s0    

!



4

r   TFnumeric_onlyboolgridc
                 K  sl  | |}|d u rt|ttfs|g}| j|}t|}t||
	dd|
	dd|||d\}}t
|}|
	dd |
	dd }}|
ddrO|pM|}n|pR|}g }t|D ].\}}|| }|| }t| \}}| |||f||d|
}|| || || qYtj||d	d
}|	d u r|}t|dkr|d n|}|d|  t|dddddd |S )Nr7   Tr8   )naxesr7   r8   figsizer%   layoutr   r   r   )r   r   F)indexr   rl   r   zBoxplot grouped by 333333??皙?皙?bottomtoprw   rightwspace)groupbyr]   listtuple_get_numeric_datar   
differencer   r   r\   r   rr   r~   zipr   appendr   ry   rz   suptitler   )plotfr2   r   r}   r   r   r   r%   r   r,   r3   groupedr   figr"   _axesr   r   	ax_valuesr   rv   gp_colkeysr   re_plotfr   byliner   r   r   _grouped_plot_by_column   sF   



	


r   rotintc
              
     s  dd l m} tjvrtdt| tjr| d} d}fdd}d fdd	dfdd}|  |d u r=d }nt|t	t
frG|}n|g}|d urat|| f||||||d}|S d u rgd|d urotd|d u r|d ur{d|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 )
NrW   )rX   )r   r   r:   krN   rP      rU   rV   )r   rB   taker   r\   r
   r#   r   r   itemsr0   fill)r   rd   rb   key_to_indexrc   value)rK   r   r   rj   G  s&   

zboxplot.<locals>._get_colorsr   r.   c                   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 )Nrk   rQ   r   rl   rm   ro   rR   rp   rS   r:   rq   rT   rW   )rr   r   )rL   rK   )rd   r   r   rs   d  s   



zboxplot.<locals>.maybe_color_bpr%   r   c                   s8  | dd | dd }}|r|t| |r|t| dd | D } dd |D }|j|fi |} d urA|jd d |dd	}|rM| n| }t	|t	| krpt
t	|t	| \}	}
|
d
kslJ |
| |	9 } |rz|j| d n|j| d |fi | dkr|S dkrtj||dS |S )Nr   r   c                 S  r;   r   r   )r=   r   r   r   r   r?   x  r@   z/boxplot.<locals>.plot_group.<locals>.<listcomp>c                 S  s   g | ]}t jt|td qS )rt   )rB   asarrayr   r{   r<   r   r   r   r?   y  s    r$   )axis	labelsizer   Tr   )rotationr#   rE   )r\   r   r   r   rG   tick_paramsrr   
get_xticks
get_yticksr   divmodr   r   r   r+   )r   r   r%   rK   r   r   rL   is_verticalticksr   	remainder)fontsizers   r,   r   r   r   
plot_groupp  s2   zboxplot.<locals>.plot_group)r   r}   r   r   r%   r   r,   r"   z7The 'layout' keyword is not supported when 'by' is Nonezfigure.figsizez;boxplot method requires numerical columns, nothing to plot.r   )r%   r   )matplotlib.pyplotpyplotr   r/   r0   r]   ry   rz   to_framer   r   r   
rc_contextgcar   r   r   r   r   r   )r2   columnr}   r%   r   r   r   r   r   r,   rK   pltrj   r   r   r   rcr   r   )rd   r   rK   rs   r,   r   r   rG   0  sh   

#
$


rG   c
                 K  s<   dd l m} t| f|||||||||	d	|
}|  |S )Nr   )	r   r}   r%   r   r   r   r   r   r,   )r   r   rG   draw_if_interactive)r   r   r}   r%   r   r   r   r   r   r,   rK   r   r   r   r   boxplot_frame  s$   r   r5   r7   r8   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   squeezer%   r7   r8   r   r   rt   )r%   r   r   r   r   r   r   r   r   r   r   rl   )r   r   )r   r   r   r   r%   r   r   r   )r   r   r   ry   rz   r{   r   rG   r   r   locr   r   concatjoincomconvert_to_list_like
MultiIndexfrom_productr   r   )r   r5   r   r   r   r   r%   r   r   r7   r8   rK   r   r   r"   r   rc   groupdr   framesdf	multi_keyr   r   r   boxplot_frame_groupby  sZ   
	




r   )NNTFNNNN)r   r   r   r   )	NNNNr   TNNN)r   r   r   r   )
TNNr   TNNNFT)
r5   r   r   r   r   r   r7   r   r8   r   )0
__future__r   typingr   r   r   r   rZ   matplotlib.artistr   numpyrB   pandas._typingr   pandas.util._exceptionsr	   pandas.core.dtypes.commonr
   pandas.core.dtypes.missingr   pandasry   pandas.core.commoncorecommonr   pandas.io.formats.printingr    pandas.plotting._matplotlib.corer   r   #pandas.plotting._matplotlib.groupbyr   !pandas.plotting._matplotlib.styler   !pandas.plotting._matplotlib.toolsr   r   r   matplotlib.axesr   matplotlib.linesr   r   r   rG   r   r   r   r   r   r   <module>   s|     N? "