
    h                      d dl mZ d dlmZmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZ d dlZd dl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mZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6c m7Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZKmLZLmMZMmNZN d dlOmPZPmQZQmRZRmSZSmTZTmUZU er*d dlVmWZW d dlXmYZY d dlZm[Z[ d dl\m]Z] d dl^m_Z_m`Z`maZambZb d dlcmdZd d1dZe G d d e      Zf G d! d"efe      Zg G d# d$eg      Zh G d% d&eg      Zi G d' d(ef      Zj G d) d*ej      Zk G d+ d,ef      Zl G d- d.el      Zm G d/ d0ef      Zny)2    )annotations)ABCabstractmethod)HashableIterableIteratorSequence)TYPE_CHECKINGAnyLiteralcastfinalN)libAbstractMethodError)cache_readonly)find_stack_level)is_any_real_numeric_dtypeis_boolis_floatis_float_dtypeis_hashable
is_integeris_integer_dtypeis_iteratoris_list_like	is_numberis_numeric_dtype)CategoricalDtypeExtensionDtype)ABCDataFrameABCDatetimeIndexABCIndexABCMultiIndexABCPeriodIndex	ABCSeries)isna)	DataFrame)Version)pprint_thing)tools)%register_pandas_matplotlib_converters)reconstruct_data_with_by)unpack_single_str_list)get_standard_colors)decorate_axesformat_dateaxismaybe_convert_indexmaybe_resampleuse_dynamic_x)create_subplotsflatten_axesformat_date_labelsget_all_linesget_xlimhandle_shared_axes)ArtistAxes)Axis)Figure)
IndexLabelNDFrameTPlottingOrientationnpt)Seriesc                D    ddl m} t        |      j                  |        S )z?
    Check if there is a color letter in the style string.
    r   )BASE_COLORS)matplotlib.colorsrF   set
isdisjoint)stylerF   s     ED:\jyotish\venv\Lib\site-packages\pandas/plotting/_matplotlib/core.py_color_in_stylerL   c   s      .;**5111    c            	         e Zd ZU dZeed9d              ZdZdZed:d       Z	de
d<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d;d	d	d	d
d	ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d<dZeed=d              Ze	 	 	 	 	 	 d>d       Zee	 	 	 	 	 	 	 	 d?d              Zd Zee	 	 	 	 d@d              ZdAdZeedBd              ZedCd       ZedCd       ZeedDd              ZedEd       ZeedFd              ZeedGd              ZeedHd              Zed        Zeed               ZedId       Z edCd       Z!dJdZ"edCd        Z#edKd!       Z$edKd"       Z%edJd#       Z&ee	 dL	 	 	 	 	 dMd$              Z'eed:d%              Z(edNd&       Z)edOd'       Z*dCd(Z+eedPd)              Z,eed*               Z-d	Z.ed+        Z/ee0	 dQ	 	 	 	 	 dRd,              Z1d- Z2ed:d.       Z3eedSdTd/              Z4edUd0       Z5edVd1       Z6edVd2       Z7e	 	 	 	 	 	 dWd3       Z8	 	 dX	 	 	 dYd4Z9ee	 	 	 	 	 	 	 	 dZd5              Z:e	 d[	 	 	 	 	 d\d6       Z;ed]d7       Z<ed^d8       Z=y)_MPLPlotzm
    Base class for assembling a pandas plot using matplotlib

    Parameters
    ----------
    data :

    c                    t         )z3Specify kind str. Must be overridden in child class)NotImplementedErrorselfs    rK   _kindzMPLPlot._kindv   s
     "!rM   verticalr   c                     y N rR   s    rK   orientationzMPLPlot.orientation       rM   r(   dataNFT)logxlogyloglog
mark_rightstackedlabelrJ   c               B   dd l m}$ |g dfv rt        d      t        j                  |      | _        t        |t              r|rt        j                  |      | _        nv| j
                  /|j                  D %cg c]  }%t        ||%         s|% c}%| _        n;|j                  D %cg c]   }%|%| j
                  vrt        ||%         r|%" c}%| _        | j
                  8| j                  dk(  r)|j                  t        | j
                              | _        || _        t        |       j!                  ||| j                        | _        t        |       j%                  |||      | _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        ||| _         d| _!        nd| _!        | jD                  | _         |	|rdn|$jF                  d   }	|	| _$        |
| _%        g | _&        g | _'        t        |       jQ                  d	|      | _)        t        |       jQ                  d
|      | _*        t        |       jQ                  d|      | _+        |!| _,        |"| _-        || _.        | | _/        || _0        |#jc                  dd       }&|#jc                  dd       }'| je                  |      }(t        |       jg                  d|&||(      \  }&}t        |       jg                  d|'||(      \  }'}|&|'d| _4        || _5        t        |tl        tn        tp        tr        jt                  tv        f      s|g}|| _<        d|#v r|rt{        d      d|#v r|#jc                  d      | _>        n|| _>        || _?        || _@        |#| _A        |#jc                  dt        j                        })| j                  |)| j|                        | _E        d| j                  vsJ | j                  | jj                        | _5        y c c}%w c c}%w )Nr   rX   zNo group keys passed!hist)kindTFz	axes.gridr\   r]   r^   xerryerr)re   rf   cmapz*Only specify one of `cmap` and `colormap`.color)Gmatplotlib.pyplotpyplot
ValueErrorcommaybe_make_listby
isinstancer(   columnsr   rT   groupbyr.   _groupedrd   type_validate_subplots_kwargsubplots_validate_sharexsharexshareyfigsizelayoutxticksyticksxlimylimtitle	use_indexxlabelylabelfontsizerot_rot_set_default_rotrcParamsgridlegendlegend_handleslegend_labels_validate_log_kwdr\   r]   r^   ra   rJ   r_   r`   axpop_get_nseries_parse_errorbarserrorsr[   booltuplelistnpndarrayr#   secondary_y	TypeErrorcolormaptableinclude_boolkwdsr   
no_default_validate_color_argsrh   _ensure_frame)*rS   r[   rd   rn   ru   rw   rx   r   ry   r   r   r   r   figr   r}   r~   r{   r|   r   r   r   r   r   r   rz   r   columnr\   r]   r^   r_   r`   ra   rJ   r   pltcolre   rf   nseriesrh   s*                                             rK   __init__zMPLPlot.__init__   s   N 	( "b>455%%b)
 dI&"226:#'<< #/C3CDI3NC<   $|| +$'').>tCy.I +  774::#7 LL)?)HIDM	T
;;d < 
 4j11&"bA		
" ?DH !DM!DM((DH<'5S\\+-FD	,.-/J00>	J00>	4j228VD

$ 
 xx%xx%##D)$Z00tWM
d$Z00tWM
d#T2	+eT2::x'PQ&-K& T>hHIIT> HHV,DM$DM
(	#..1..udmmD
dii'''&&tyy1	G  s   9PP(%Pc                    | ||d} t        |       S d} t        |       S t        |       st        d      t        |       S )NTFzsharex must be a bool or None)r   r   r   )rw   r   rn   s      rK   rv   zMPLPlot._validate_sharex   sU     >zbj F|  F| ;<<F|rM   c                x    |%t        |t              st        |t              r|dk(  r|S t        d| d| d      )Nsymz	keyword 'z'' should be bool, None, or 'sym', not '')ro   r   strrk   )clskwdvalues      rK   r   zMPLPlot._validate_log_kwd/  sH     M%&5#&5E>LuCE7!L
 	
rM   c                   t        | t              r| S t        | t              st        d      d}||vr!t        ddj	                  |       d| d      t        |t
              rt        d      |j                  }t        |t              rt        d      |j                         t        |      k7  rt        d	      g }t               }| D ]  }t        |      st        d
      |j                  |      }|dk(  j                         r1t        j                   |dk(  |      }	t        dt#        |	       d      t        |      }
|j%                  |
      }|rt        d| d      |j'                  |
      }|j)                  t+        |              |j-                  |      }|D ]%  }|j/                  |      }|j)                  |f       ' |S )a_  
        Validate the subplots parameter

        - check type and content
        - check for duplicate columns
        - check for invalid column names
        - convert column names into indices
        - add missing columns in a group of their own
        See comments in code below for more details.

        Parameters
        ----------
        subplots : subplots parameters as passed to PlotAccessor

        Returns
        -------
        validated subplots : a bool or a list of tuples of column indices. Columns
        in the same tuple will be grouped together in the resulting plot.
        z(subplots should be a bool or an iterable)linebarbarhrc   kdedensityareapiez2When subplots is an iterable, kind must be one of z, z. Got .z3An iterable subplots for a Series is not supported.zOAn iterable subplots for a DataFrame with a MultiIndex column is not supported.zTAn iterable subplots for a DataFrame with non-unique column labels is not supported.zPWhen subplots is an iterable, each entry should be a list/tuple of column names.zColumn label(s) z not found in the DataFrame.z3Each column should be in only one subplot. Columns z! were found in multiple subplots.)ro   r   r   rk   joinr&   rQ   rp   r$   nuniquelenrH   r   get_indexer_foranyr   extractr   intersectionunionappendr   
differenceget_loc)ru   r[   rd   supported_kindsrp   outseen_columnsgroupidx_locs
bad_labelsunique_columns
duplicatesunseen_columnsr   idx_locs                  rK   rt   z MPLPlot._validate_subplots_kwarg?  s   2 h%OHh/GHH	
 &))O45VD6D 
 dI&%E  ,,g}-%$ 
 ??G,%+ $ &)eE& >  ..u5HB##%ZZB>
 &tJ'7&88TU  !ZN%22>BJ )l*KM  (--n=LJJuX') , !++L9$Foof-GJJz" % 
rM   c                   |t         j                  u r0d| j                  v r!|t        j                  dt                      y | j                  dk(  r|t        |      s|g}t        |t              r| j                  dk(  rt        |      dv r|g}|t        j                  dt                      | j                  Lt        | j                        r| j                  }n| j                  g}|D ]  }t        |      st        d       |S )NcolorszC'color' and 'colormap' cannot be used simultaneously. Using 'color'
stacklevel   )      zCannot pass 'style' string with a color symbol and 'color' keyword argument. Please use one or the other or pass 'style' without a color symbol)r   r   r   warningswarnr   r   r   ro   r   r   rJ   rL   rk   )rS   rh   r   stylesss        rK   r   zMPLPlot._validate_color_args  s    CNN"499$)=$/1
 <<1!2<;NGEeU#(9c%jF>RGEMMU+-
 ::!DJJ'**"1%$G   rM   c              #     K   | j                         D ](  \  }}|t        j                  |j                        f * y wrW   )itemsr   asarrayvalues)r[   r   r   s      rK   
_iter_datazMPLPlot._iter_data  s6     
  ::<KC rzz&--000	 (s   =?c                    |j                   dk(  ry| j                  $| j                  dk(  rt        | j                        S | j                  $| j                  dk(  rt        | j
                        S |j                  d   S )Nr   rc   box)ndimrn   rT   r   rr   rp   shaperS   r[   s     rK   r   zMPLPlot._get_nseries  sh     99>WW TZZ6%9t}}%%WW TZZ5%8t||$$::a= rM   c                8    | j                  | j                        S rW   )r   r[   rR   s    rK   r   zMPLPlot.nseries  s       ++rM   c                8    | j                   j                          y rW   )r   draw_if_interactiverR   s    rK   drawzMPLPlot.draw  s    $$&rM   c                <   | j                          | j                  }| j                  |       | j                          | j	                          | j                  |       | j                  D ]/  }| j                  |       | j                  || j                         1 y rW   )
_compute_plot_datar   
_make_plot
_add_table_make_legend_adorn_subplotsaxes_post_plot_logic_common_post_plot_logicr[   )rS   r   r   s      rK   generatezMPLPlot.generate  sw    !hhS!))B((,!!"dii0 rM   c                    t        | j                        dk7  xs2 t        | j                        dk7  xs t        | j                        dk7  S )zcheck whether ax has datar   )r   linesartists
containers)r   s    rK   _has_plotted_objectzMPLPlot._has_plotted_object  s=     288}!TS_%9TS=OST=TTrM   c                8   | j                  |      s| j                  |      S t        |d      r|j                  S t        |d      r|S ||j	                         }}|j
                  |_        |j                  |_        ||c|_        |_        | j                  |      s|j                         j                  d       | j                  du s| j                  du r|j                  d       |S | j                  dk(  s| j                  dk(  r|j                  d       |S )Nright_axleft_axFTlogr   symlog)on_right_get_ax_layerhasattrr   twinx
_get_lines_get_patches_for_fillr   r   	get_yaxisset_visibler]   r^   
set_yscale)rS   r   axes_numorig_axnew_axs        rK   _maybe_right_yaxiszMPLPlot._maybe_right_yaxis  s	   }}X&%%b))2z";;R#I !"((*VG ' 2 2F -- (
  -Gfn
 ++G4!!#//6yyD DKK4$7!!%( M e#t{{e';!!(+MrM   c                     | j                   d   S Nr   _axes_and_figrR   s    rK   r   zMPLPlot.fig(  s     !!!$$rM   c                     | j                   d   S Nr   r	  rR   s    rK   r   zMPLPlot.axes-  s     !!!$$rM   c           	        | j                   rt        | j                   t              r| j                  nt	        | j                         }t        || j                  | j                  | j                  | j                  | j                  | j                        \  }}n| j                  8| j                  j                  | j                        }|j                  d      }nM| j                  j                         }| j                  |j!                  | j                         | j                  }t#        |      }| j$                  du s| j&                  du r |D cg c]  }|j)                  d       c} n=| j$                  dk(  s| j&                  dk(  r|D cg c]  }|j)                  d       c} | j*                  du s| j&                  du r |D cg c]  }|j-                  d       c} n=| j*                  dk(  s| j&                  dk(  r|D cg c]  }|j-                  d       c} t/        t0        d   |      }||fS c c}w c c}w c c}w c c}w )	N)naxesrw   rx   ry   r   rz   layout_type)ry   o   Tr   r   r   r=   )ru   ro   r   r   r   r5   rw   rx   ry   r   rz   _layout_typer   figureadd_subplot
get_figureset_size_inchesr6   r\   r^   
set_xscaler]   r  r   r	   )rS   r  r   r   aaxes_seqs         rK   r
  zMPLPlot._axes_and_fig3  s    == *4==$ ?SEW  ({{{{77{{ --IC WW_((//$,,/7C??3'D''$$&C||'##DLL177DD!99t 3*./$QQ\\% $/YY%4;;%#7-12TQ\\(#T299t 3*./$QQ\\% $/YY%4;;%#7-12TQ\\(#T2($/} 02 02s   H?II	Ic                   | j                   rP| j                  8t        | j                        s# | j                  j
                  | j                   S | j                  S t        | j                  t              xr | j                  }t        | j                        xr" t        | j                        | j                  k(  }|s|r | j                  | j                  d   d      S | j                  d   S )z$
        Return result axes
        r   F)primary)ru   rz   r   r   r   reshapero   r   r   r   r   r   )rS   sec_trueall_secs      rK   resultzMPLPlot.result[  s    
 =={{&|DGG/D(tyy(($++66yy !$"2"2D9Nd>N>NH T--. :(()T\\9  7))$))A,)FFyy|#rM   c                N   t        | j                  t              r| S t        | j                        st	        | j                        r;t        | j                  t
              r!| j                  dt        j                        S t        |       dkD  rt        j                  |       S | S )Nfloat)dtypena_valuer   )ro   r!  r   r   r   r    to_numpyr   nanr   r   r[   s    rK   _convert_to_ndarrayzMPLPlot._convert_to_ndarrayt  s|     djj"23K TZZ(N4::,FJJJM
 ==w=@@ t9q=::d##rM   c                R   t        |t              rD| j                  }||j                  d}||j	                         }|S |j	                  |      }|S | j
                  dv rD| j                  | j                  n| j                  | j                  z   }|j                  d d |f   }|S )N )name)rc   r   )	ro   r&   ra   r)  to_framerT   rn   rp   loc)rS   r[   ra   colss       rK   r   zMPLPlot._ensure_frame  s    dI&JJE}!2}}} 	 }}%}0  ZZ?*#'77?4<<tww8ND88AtG$DrM   c                   | j                   }| j                  3d| _        t        | j                   | j                  | j                        }|j                  d      }t        j                  dddg}| j                  du r|j                  t        j                         d }| j                  dk(  rt        j                  g}dg}| j                  d	k(  r|j                  g d
       |j                  ||      }|j                  d   dk(  }|rt        d      |j!                  t#        |       j$                        | _         y )NT)rn   r,  F)copydatetime
datetimetz	timedeltar   scatter)objectcategorystring)includeexcluder   r   zno numeric data to plot)r[   rn   ru   r-   rp   infer_objectsr   numberr   r   bool_rT   extendselect_dtypesr   r   applyrs   r&  )rS   r[   include_typeexclude_typenumeric_datais_emptys         rK   r   zMPLPlot._compute_plot_data  s   yy 77 DM+DII$''UD !!u!-		:|[I $) ::II;L'=L ::" @A)),)U%%b)Q.566 &&tDz'E'EF	rM   c                    t        |       rW   r   )rS   r   s     rK   r   zMPLPlot._make_plot  s    !$''rM   c                    | j                   du ry | j                   du r| j                  j                         }n| j                   }| j                  d      }t	        j                   ||       y )NFTr   )r   r[   	transpose_get_axr+   )rS   r[   r   s      rK   r   zMPLPlot._add_table  sS    ::ZZ499&&(D::D\\!_BrM   c                .   | j                   dk(  s| j                   t        |       j                  |j                  | j                  | j
                         t        |       j                  |j                  | j
                         t        |d      r;t        |       j                  |j                  j                  | j
                         yy| j                   dk(  rt        |       j                  |j                  | j                  | j
                         t        |       j                  |j                  | j
                         t        |d      r;t        |       j                  |j                  j                  | j
                         yyt        )z!Common post process for each axesrU   N)r   r   )r   r   
horizontal)
rY   rs   _apply_axis_propertiesxaxisr   r   yaxisr   r   rk   )rS   r   s     rK   r   zMPLPlot._post_plot_logic_common  s=    z)T-=-=-EJ--dhh .  J--bhh-Or:&T
11KK%% 2  '
 -J--dhh .  J--bhh-Or:&T
11KK%% 2  '
 rM   c                     y)z7Post process for each axes. Overridden in child classesNrX   rS   r   r[   s      rK   r   zMPLPlot._post_plot_logic  s    rM   c           	     *   t        | j                        dkD  rW| j                  |      }| j                  |      \  }}t	        |t        |      ||z  ||| j
                  | j                         | j                  D ]  }t        |d|      }| j                  |j                  | j                         | j                  |j                  | j                         | j                  |j                  | j                         | j                  |j                  | j                         | j                   $|j#                  t%        | j                                |j'                  | j&                          | j(                  r| j*                  rt-        | j(                        rt        | j(                        | j.                  k7  r.t1        dt        | j(                         d| j.                         t3        | j                  | j(                        D ]  \  }}|j5                  |        y|j7                  | j(                         yt-        | j(                        rd}t1        |      | j                  d   j5                  | j(                         yy)z%Common post process unrelated to datar   )axarrnplotsr  nrowsncolsrw   rx   r   Nz~The length of `title` must equal the number of columns if using `title` of type `list` and `subplots=True`.
length of title = z
number of columns = zNUsing `title` of type `list` is not supported unless `subplots=True` is passed)r   r   _get_subplots_get_axes_layoutr:   rw   rx   getattrr|   
set_yticksr{   
set_xticksr~   set_ylimr}   set_xlimr   
set_ylabelr*   r   r   ru   r   r   rk   zip	set_titlesuptitle)rS   r   all_axesrP  rQ  r   r   msgs           rK   r   zMPLPlot._adorn_subplots  s    tyy>A))#.H005LE58}em{{{{ ))BZ,B{{&dkk*{{&dkk*yy$DII&yy$DII& {{&l4;;78GGDII' * ::}}

+4::$,,6(1 25TZZ0A B337<<.	B  &)DJJ%?	EU+ &@ LL,

+;  %S/)		!&&tzz2/ rM   c                    ||P| j                         | j                         z   }|D ])  }||j                  |       ||j                  |       + yy)a  
        Tick creation within matplotlib is reasonably expensive and is
        internally deferred until accessed as Ticks are created/destroyed
        multiple times per draw. It's therefore beneficial for us to avoid
        accessing unless we will act on the Tick.
        N)get_majorticklabelsget_minorticklabelsset_rotationset_fontsize)axisr   r   labelsra   s        rK   rH  zMPLPlot._apply_axis_properties)  s`     ?h2--/$2J2J2LLF?&&s+'&&x0	   3rM   c                &   t        | j                  j                  t              s/| j                  j                  j                  }|t        |      }|S t        t
        | j                  j                  j                        }dj                  |      S N,)	ro   r[   rp   r$   r)  r*   mapnamesr   )rS   r)  stringifieds      rK   legend_titlezMPLPlot.legend_title=  sm     $))++];99$$))D#D)KlDII,=,=,C,CDK88K((rM   c                b    | j                   s"| j                  r| j                  |      r|dz  }|S )z
        Append ``(right)`` to the label of a line if it's plotted on the right axis.

        Note that ``(right)`` is only appended when ``subplots=False``.
        z (right))ru   r_   r   )rS   ra   indexs      rK   _mark_right_labelzMPLPlot._mark_right_labelI  s+     }}T]]55IZErM   c                p    | j                   j                  |       | j                  j                  |       y)z
        Append current handle and label to ``legend_handles`` and ``legend_labels``.

        These will be used to make the legend.
        N)r   r   r   )rS   handlera   s      rK   _append_legend_handles_labelsz%MPLPlot._append_legend_handles_labelsT  s,     	""6*!!%(rM   c                   | j                  | j                  d         \  }}g }g }d}| j                  s0||j                         j	                         }t        t        j                        t        d      k  r|j                  }n|j                  }|j                         D cg c]  }|j	                          }}| j                  rv| j                  dk(  r1|t        | j                        z  }|t        | j                        z  }n|| j                  z  }|| j                  z  }| j                  | j                  }t        |      dkD  r|j                  ||d|       y y | j                  rz| j                  rm| j                  D ]]  }|j!                         st#        j$                         5  t#        j&                  ddt(               |j                  d	       d d d        _ y y y c c}w # 1 sw Y   qxY w)
Nr   r(  z3.7reversebest)r+  r   ignorez.No artists with labels found to put in legend.)r+  )_get_ax_legendr   ru   	get_titleget_textr)   mpl__version__legendHandlesr   	get_textsr   reversedr   rl  r   get_visibler   catch_warningsfilterwarningsUserWarning)rS   r   leghandlesre  r   xs          rK   r   zMPLPlot._make_legend^  s   %%diil3C}}0023??+gen<!//G!00G03@1!**,@{{;;)+x(;(;<<Ght'9'9::Ft222Gd000F$$0 --E7|a		'6vU	C   ]]t{{ii>>#!002 //$L'
 		f	- 32    +]! A& 32s   %G,1.G11G:	c                    | j                         }t        | dd      xs t        | dd      }d}||j                         }|||}|} | |fS )zQ
        Take in axes and return ax and legend under different scenarios
        r   Nr   )
get_legendrT  )r   r  other_ax	other_legs       rK   rw  zMPLPlot._get_ax_legend  sa     mmo2y$/P72z43P	 ++-I;90CB3wrM   c                    dd l m} |S r  )ri   rj   )rS   r   s     rK   r   zMPLPlot.plt  s     	(
rM   c                   | j                   j                  }|j                  dv }| j                  rt	        |t
              r |j                         j                         }|S t        |j                        r|j                         }|S t	        |t              s|r|j                         }|S d| _        t        t        t        |                  }|S t        t        t        |                  }|S )N)r/  date
datetime64timeT)r[   rn  inferred_typer   ro   r%   to_timestamp	_mpl_reprr   r!  r"   _need_to_set_indexr   ranger   )rS   rn  is_datetyper  s       rK   _get_xtickszMPLPlot._get_xticks  s    		))-WW >>%0&&(224"  +5;;7
 OO%  E#34OO%  +/'s5z*+  U3u:&'ArM   c                   t        |      }|j                         r?t        j                  j	                  |      }t        j                  j                  ||      }t        |t              r|j                         }|rjd|v r't        j                  |j                  d            |d<   d|v r't        j                  |j                  d            |d<    |j                  ||fi |S ||||fn||f} |j                  |i |S Nre   rf   )r'   r   r   maarraymasked_wherero   r#   r  geterrorbarplot)	r   r   r  yrJ   is_errorbarr   maskargss	            rK   _plotzMPLPlot._plot  s    
 Aw88:AA""4+Aa"A~!xx(89V~!xx(89V2;;q!,t,, %*$5Aq%=Aq6D277D)D))rM   c                    | j                   S )zCSpecify whether xlabel/ylabel should be used to override index name)r   rR   s    rK   _get_custom_index_namezMPLPlot._get_custom_index_name      {{rM   c                   t        | j                  j                  t              r^| j                  j                  j                  }t        j                  | r)dj                  |D cg c]  }t        |       c}      }n0d }n-| j                  j                  j                  }|t        |      }| j                         }|t        |      }|S c c}w rg  )ro   r[   rn  r$   rj  rl   any_not_noner   r*   r)  r  )rS   r)  r  
index_names       rK   _get_index_namezMPLPlot._get_index_name  s    diioo}599??((D&xx$ ?$Qa$ ?@99??''D#D) 002
!
+D !@s   &Cc                :    |rt        |d|      S t        |d|      S )z,get left (primary) or right (secondary) axesr   r   )rT  )r   r   r  s      rK   r   zMPLPlot._get_ax_layer  s%     2y"--2z2..rM   c                    t        | j                  t              r't        fdt	        | j                        D              S S )zJReturn the index of the axis where the column at col_idx should be plottedc              3  0   K   | ]  \  }}|v r|  y wrW   rX   ).0	group_idxr   col_idxs      rK   	<genexpr>z/MPLPlot._col_idx_to_axis_idx.<locals>.<genexpr>  s&      *B&Ye# *Bs   )ro   ru   r   next	enumerate)rS   r  s    `rK   _col_idx_to_axis_idxzMPLPlot._col_idx_to_axis_idx  s=     dmmT* *3DMM*B   NrM   c                "   | j                   rB| j                  |      }| j                  |   }| j                  ||      }|| j                  |<   n!| j                  d   }| j                  ||      }|j	                         j                  d       |S )Nr   T)ru   r  r   r  r   r  )rS   ir   s      rK   rE  zMPLPlot._get_ax  s     ==))!,A1B((Q/BDIIaL1B((Q/B
""4(	rM   c                   t        | j                  t              r| j                  S t        | j                  t        t        t
        j                  t        f      r%| j                  j                  |   | j                  v S y rW   )
ro   r   r   r   r   r   r   r#   r[   rp   )rS   r  s     rK   r   zMPLPlot.on_right  sa    d&&-###d&&bjj((KL99$$Q'4+;+;;; MrM   c                   d}| j                   nt        | j                   t              r	 | j                   |   }nCt        | j                   t              r| j                   j                  ||      }n| j                   }d|v xs | j                  du}|du xs t        |       }|s| j                  r2|r0t        |t              r||   |d<   ||fS ||t        |      z     |d<   ||fS # t        $ r Y uw xY w)z
        Manage style and color based on column number and its label.
        Returns tuple of appropriate style and kwds which "color" may be added.
        Nrh   )
rJ   ro   r   
IndexErrordictr  r   rL   ru   r   )rS   r   r   col_numra   rJ   	has_colornocolor_styles           rK   _apply_style_colorszMPLPlot._apply_style_colors  s     ::!$**d+ JJw/E DJJ-

ue4

tO@t}}D'@	C_U-C)CM&$' &uW d{ !'wV'< =Wd{ " s   C' '	C32C3c                    || j                   }|dk(  r| j                  }n| j                  j                  |      }t	        || j
                  |      S )Nrh   )
num_colorsr   rh   )r   rh   r   r  r/   r   )rS   r  
color_kwdsrh   s       rK   _get_colorszMPLPlot._get_colors;  sP    
 J JJEIIMM*-E"!]]
 	
rM   c                   |d|fS d }t        |t              r |||      }||fS t        |t              r	 ||fS t        |t              r: |||      }t	        j
                  |      }t	        j                  ||df      }||fS t        |t              r^||   j                  }||j                  j                  |         }t	        j
                  |      }t	        j                  ||df      }||fS t        |      r3t        |      rt	        j
                  t        |            }nt	        j
                  |      }|j                  }t        |t              rS|d   dk(  rKt	        j                  |d      }|j                  }|d   t!        |      k7  rst#        dt!        |       d      t        |t              rK|j$                  dk(  r<|d   |k7  s|d   dk7  s|d   t!        |      k7  rt#        d	| d
t!        |       d      t!        |      dk(  rt	        j                  ||df      }||fS t'        |      r&t	        j                  |g|t!        |      f      }||fS d|  d}t#        |      )a  
        Look for error keyword arguments and return the actual errorbar data
        or return the error DataFrame/dict

        Error bars can be specified in several ways:
            Series: the user provides a pandas.Series object of the same
                    length as the data
            ndarray: provides a np.ndarray of the same length as the data
            DataFrame/dict: error values are paired with keys matching the
                    key in the plotted DataFrame
            str: the name of the column within the plotted DataFrame

        Asymmetrical error bars are also supported, however raw error values
        must be provided in this case. For a ``N`` length :class:`Series`, a
        ``2xN`` array should be provided indicating lower and upper (or left
        and right) errors. For a ``MxN`` :class:`DataFrame`, asymmetrical errors
        should be in a ``Mx2xN`` array.
        Nc                <    |j                  | j                        }|S rW   )reindexrn  )r[   es     rK   match_labelsz.MPLPlot._parse_errorbars.<locals>.match_labelsg  s    		$**%AHrM   r   r      z>Asymmetrical error bars should be provided with the shape (2, )r   z;Asymmetrical error bars should be provided with the shape (z, 2, z	No valid z	 detected)ro   r!   r  r&   r   
atleast_2dtiler   r   rp   dropr   r   r   r   expand_dimsr   rk   r   r   )ra   errr[   r   r  evalues	err_shaper^  s           rK   r   zMPLPlot._parse_errorbarsM  s   . ;:	
 c<(tS)C| Dyy T"v Dyq Y'tS)C--$C''#|,Ch Dyc S!3i&&G))#./D--(C''#|,CZ DyW #3mmDI. mmC(		I $	*y|q/@nnS!,II	Q<3t9,$..1$i[;  D,/CHHMq\W,!!)!!D	1$++2)5T1F  3x1}ggcGQ<0 Dy s^''#d)$C Dy eWI.CS/!rM   c                    i }t        ddg||g      D ][  \  }}|s	| j                  |   }t        |t        t        f      r|||j                         v r||   }nd }n	||||   }|W|||<   ] |S r  )rZ  r   ro   r!   r  keys)	rS   ra   rn  re   rf   r   kwflagr  s	            rK   _get_errorbarszMPLPlot._get_errorbars  s     VV,tTl;HBkk"ocL$#78(Uchhj-@!%j"&3?e*C?!$F2J < rM   c                    t        t        j                        t        d      k  rddlm} nddlm} |j                         D cg c]   }t        ||      r|j                         |" c}S c c}w )Nz3.8r   )Subplotr<   )	r)   rz  r{  matplotlib.axesr  r=   get_axesro   get_subplotspec)rS   r   Klassr   s       rK   rR  zMPLPlot._get_subplots  sb    3??#gen485 lln
$2u%"*<*<*>*J $
 	
 
s   %A-c                   | j                  |      }t               }t               }|D ]N  }|j                         j                         }|j	                  |d   d          |j	                  |d   d          P t        |      t        |      fS )Nr   r   )rR  rH   get_position
get_pointsaddr   )rS   r   r   x_sety_setr   pointss          rK   rS  zMPLPlot._get_axes_layout  s|    !!#&B__&113FIIfQil#IIfQil#	 
 E
CJ''rM   )returnr   )r  
str | None)NNFNFTNNTNNNNNNNNNNNFNFNFN)*rn   IndexLabel | Noneru   bool | Sequence[Sequence[str]]rw   bool | Nonerx   r   r   r   ry   ztuple[float, float] | Noner   z
bool | strr   Hashable | Noner   r  r   
int | Noner   z bool | tuple | list | np.ndarrayr   r   r   r   r   r  r\   bool | None | Literal['sym']r]   r  r^   r  r_   r   r`   r   ra   r  r  None)rw   r  r  r   r   r   r   r  r  r  )ru   r  r[   Series | DataFramerd   r   r  zbool | list[tuple[int, ...]])r[   z.DataFrame | dict[Hashable, Series | DataFrame]r  z%Iterator[tuple[Hashable, np.ndarray]]r[   r  r  int)r  r  r  r  )r   r=   r  r   )r   r=   r  r  r  r=   )r  r?   )r  zSequence[Axes])r  ztuple[Sequence[Axes], Figure])r  r(   r   r?   r  r  r   r=   r  r  NN)rd  r>   r   r  r  r  )ra   r   rn  r  r  r   )rq  r;   ra   r   r  r  )r   r=   )NFr   r=   r  
np.ndarrayr  r   )T)r  r   )r  r  r  r  )r  r  )r   dict[str, Any]r  r  ra   r   )Nrh   )r  r  r  r   )ra   r   r[   rA   r   r  r  ztuple[Any, NDFrameT])NNTT)re   r   rf   r   r  r  )r   r?   )r   r?   r  ztuple[int, int])>__name__
__module____qualname____doc__propertyr   rT   r  r   rY   __annotations__r   r   staticmethodrv   classmethodr   rt   r   r   r   r   r   r   r   r  r   r   r   r
  r  r&  r   r   r   r   r   r   r   rH  rl  ro  rr  r   rw  r   r  r  r,   r  r  r  r   r  rE  r   r  r  r   r  rR  rS  rX   rM   rK   rO   rO   l   sS    "  " LL  O
  $38".2!"&"&#8="$(9Y2< .3-2/4!%IY2 	Y2
 1Y2 Y2 Y2 Y2 ,Y2 Y2(  )Y2*  +Y2, -Y2. 6/Y22 3Y26 7Y28 "9Y2< +=Y2> +?Y2@ -AY2B CY2D EY2F GY2L 
MY2v    

 ,
 
&	
 
 g0g8JgRUg	%g  gR%N 1<1	.1  1
! ,  , ' ' 
1 
1 U  U ! !F %  % %  % $  $L $ $0   $   #G #GJ(    4 F F ;3 ;3z 5911(21	1  1$ )  )   ) )(.T      
 
 8 *IN**'*BF* + *,  & /  /     < < *58AD < "&!

 
$ \\'\25\	\  \| FJ,0?C	 * 

 

 	( 	(rM   rO   c                  R    e Zd ZdZdZddZed	d       Zed
d       Zedd       Z	y)	PlanePlotzM
    Abstract class for plotting on plane, currently scatter and hexbin.
    singlec                   t        j                  | |fi | ||t        | j                  dz         t	        |      r=| j
                  j                  j                         s| j
                  j                  |   }t	        |      r=| j
                  j                  j                         s| j
                  j                  |   }|| _        || _	        y )Nz requires an x and y column)
rO   r   rk   rT   r   r[   rp   _holds_integerr  r  )rS   r[   r  r  kwargss        rK   r   zPlanePlot.__init__  s    t.v.9	TZZ*GGHHa=!2!2!A!A!C		!!!$Aa=!2!2!A!A!C		!!!$ArM   c                     yr  rX   r   s     rK   r   zPlanePlot._get_nseries  s    rM   c                   | j                   | j                  }}| j                  | j                  n
t        |      }| j                  | j                  n
t        |      }|j                  |       |j                  |       y rW   )r  r  r   r*   r   
set_xlabelrY  )rS   r   r[   r  r  r   r   s          rK   r   zPlanePlot._post_plot_logic  s]    vvtvv1 $ 7\!_ $ 7\!_ 	f
frM   c               J    |j                   d   } |j                  |fd|i|S )Nr   r   )collectionscolorbar)rS   r   r   r   imgs        rK   _plot_colorbarzPlanePlot._plot_colorbar  s-    " nnR s||C/B/$//rM   Nr  r  r  )r   r=   r   r?   )
r  r  r  r  r  r   r   r   r   r  rX   rM   rK   r  r    sO     L
     0 0rM   r  c                  z     e Zd Zed	d       Z	 	 d
ej                  dd	 	 	 d fdZddZddZ	ddZ
ddZ xZS )ScatterPlotc                     y)Nr2  rX   rR   s    rK   rT   zScatterPlot._kind  s    rM   N)r	  normc               8   |d}nt        |      r||j                  v r||   }|| _        || _        || _        t        	|   |||fi | t        |      r=| j                  j                  j                         s| j                  j                  |   }|| _
        y )N   )r   rp   r   r	  r  superr   r   r[   r  c)
rS   r[   r  r  r   r  r	  r  r  	__class__s
            rK   r   zScatterPlot.__init__  s     9 A^T\\ 1QA 	q!.v.a=!2!2!A!A!C		!!!$ArM   c           	     .   | j                   | j                  | j                  | j                  f\  }}}}| j                  d   }t        |      xr || j                  j                  v }|xr' t        | j                  |   j                  t              }| j                  }	| j                  |	||      }
| j                  |
|      \  }}| j                  |
|      }| j                  r| j                  }nd } |j                   ||   j"                  ||   j"                  f|
|||| j$                  d| j&                  }|r|r|nd}| j)                  |||      }|rt+        | j                  |   j,                  j.                        }|j1                  t3        j4                  d|dz
  |             |j6                  j9                  | j                  |   j,                  j.                         || j;                  ||       | j=                  |dd      }| j=                  |dd      }t+        |      dkD  st+        |      dkD  rSt?        |fi |}|jA                         d   |d	<    |jB                  ||   j"                  ||   j"                  fd
di| y y )Nr   )r  ra   rg   r  r   r(  )r   ra         ?F)ra   rn  rf   )ra   rn  re   ecolor	linestylenone)"r  r  r  r[   r   r   rp   ro   r!  r   rh   _get_c_values_get_norm_and_cmap_get_colorbarr   ra   r2  r   r   r   r  r   cat
categories	set_ticksr   linspacer   set_yticklabelsrr  r  r  get_facecolorr  )rS   r   r  r  r  r[   r   c_is_columncolor_by_categoricalrh   c_valuesr  rg   cbra   r2  
cbar_labelcbarn_catserrors_xerrors_yerr_kwdss                         rK   r   zScatterPlot._make_plot4  sf   		91aYYq\!!n?dii.?.?)?*  
zIIaL 00
 

%%e-A;O,,X7KL
d+6;;JJEE"**GNNGNN	
 ff	
 ii	
 )rJ&&rs*&ED#TYYq\--889r{{3fEF''		!(8(8(C(CD.. 	 &&Qae&D&&Qae&Dx=1H 1H11H!(!6!6!8!;HXBKKQQU&UHU !2rM   c                   | j                   }||t        d      ||| j                  j                  d   }|S ||}|S |r%| j                  |   j
                  j                  }|S |r| j                  |   j                  }|S |}|S )Nz&Specify exactly one of `c` and `color`zpatch.facecolor)r  r   r   r   r[   r  codesr   )rS   rh   r$  r#  r  r%  s         rK   r  zScatterPlot._get_c_valuesh  s    FF=U.DEE9xx(():;H  H  "yy|''--H
 	 yy|**H  HrM   c                b   | j                   }| j                  *t        j                  j	                  | j                        }n1t        |t              st        |      rt        j                  d   }nd }|r|ddlm	} t        | j                  |   j                  j                        }|j                  t        |j                         D cg c]
  } ||       c}      }t#        j$                  d||dz         }|j'                  ||j                         }	|	|fS | j(                  }	|	|fS c c}w )NGreysr   )r   r   )r  r   rz  	colormapsget_cmapro   r   r   
matplotlibr   r   r[   r  r  ListedColormapr  Nr   r   BoundaryNormr  )
rS   r%  r$  r  rg   r   r)  r  boundsr  s
             rK   r  zScatterPlot._get_norm_and_cmapx  s    FF==$==))$--8D Hc*/?/I==)DDD$4)1))445F((5=)I=a$q'=)IJD[[FFQJ7F&&vtvv6D
 Tz 99DTz *Js   D,c                    | j                   xs |}| j                  }|t        j                  u rt	        |      xr |S |S rW   )r   r	  r   r   r   )rS   r%  r#  plot_colorbarr&  s        rK   r  zScatterPlot._get_colorbar  s<     4]]#H-?-?	rM   )r  zLiteral['scatter']r  )r	  zbool | lib.NoDefaultr  r  r  )r$  r   r#  r   )r$  r   )r#  r   r  r   )r  r  r  r  rT   r   r   r   r   r  r  r  __classcell__r  s   @rK   r  r    s]      
 *- ' 
82Vh 4rM   r  c                  J     e Zd Zedd       Zdddd	 fdZd
dZddZ xZS )
HexBinPlotc                     y)NhexbinrX   rR   s    rK   rT   zHexBinPlot._kind  s    rM   T)r	  c                  t        |   |||fi | t        |      r=| j                  j                  j                         s| j                  j                  |   }|| _        || _        t        | j                  | j                     j                               dk(  rt        | j                  dz         t        | j                  | j                     j                               dk(  rt        | j                  dz         y )Nr   z  requires x column to be numericz  requires y column to be numeric)r  r   r   r[   rp   r  Cr	  r   r  _get_numeric_datark   rT   r  )rS   r[   r  r  rA  r	  r  r  s          rK   r   zHexBinPlot.__init__  s    q!.v.a=!2!2!A!A!C		!!!$A  tyy 2245:TZZ*LLMMtyy 2245:TZZ*LLMM ;rM   c                   | j                   | j                  | j                  | j                  f\  }}}}| j                  d   }| j
                  xs d}t        j                  j                  |      }| j                  }|d }	n||   j                  }	 |j                  ||   j                  ||   j                  f|	|d| j                   |r| j                  ||       y y )Nr   BuGn)rA  rg   )r   )r  r  r[   rA  r   r   rz  r1  r2  r	  r   r?  r   r  )
rS   r   r  r  r[   rA  r   rg   r&  r%  s
             rK   r   zHexBinPlot._make_plot  s    		46691dAYYq\}}&}}%%d+]]9HAw~~H		$q'..$q'..UH4U499U, rM   c                     y rW   rX   rR   s    rK   r   zHexBinPlot._make_legend      rM   )r  zLiteral['hexbin']rW   )r	  r   r  r  r  r  )	r  r  r  r  rT   r   r   r   r:  r;  s   @rK   r=  r=    s-     Nt N-"rM   r=  c                     e Zd ZdZedd       Zedd       ZddZedd       Z	edd       Z
ddZe	 	 	 d	 	 	 dd	       Zeddd
       Zedd       Zeedd              Zee	 	 	 	 	 	 	 	 dd              Zeedd              ZddZy)LinePlotr   c                     yNrU   rX   rR   s    rK   rY   zLinePlot.orientation      rM   c                     y)Nr   rX   rR   s    rK   rT   zLinePlot._kind      rM   c                   ddl m} t        j                  | |fi | | j                  r!| j
                  j                  d      | _        |d   | _        d| j                  v r*t        | j                  j                  d            | _        y y )Nr   )plot_paramsr   x_compat)pandas.plottingrO  rO   r   r`   r[   fillnarQ  r   r   r   )rS   r[   r  rO  s       rK   r   zLinePlot.__init__  sp    /t.v.<<		((q(1DI#J/" z!:;DM #rM   c                \    | j                    xr | j                  xr | j                         S rW   )rQ  r   _use_dynamic_xrR   s    rK   _is_ts_plotzLinePlot._is_ts_plot  s(     == MT^^M8K8K8MMrM   c                L    t        | j                  d      | j                        S r  )r4   rE  r[   rR   s    rK   rU  zLinePlot._use_dynamic_x  s    T\\!_dii88rM   c           	        | j                         rNt        | j                  d      | j                        }|j                  }| j
                  }|j                         }n8| j                         }| j                  }| j                  | j                        }| j                         }t        j                  | j                  j                          }| j                         }t!        |      D ]	  \  }	\  }
}| j                  |	      }| j"                  j%                         }| j&                  | j&                  |d<   | j)                  |||	|
      \  }}| j+                  |
|	      }t-        |fi |}t/        |
      }
| j1                  |
|	      }
|
|d<    ||||f||	||d|}| j3                  |d   |
       | j                         st5        |      }t7        |      \  }}|j9                  ||        y )Nr   r%  rh   ra   rn  rn  ra   )rJ   
column_numstacking_idr  )rV  r2   rE  r[   rn  _ts_plotr   r  r  r   _get_stacking_idrl   r  r   r   r  r  r   r.  rh   r  r  r  r*   ro  rr  r8   r9   rX  )rS   r   r[   r  plotfitr\  r  r   r  ra   r  r   r   rJ   r   newlinesr   leftrights                       rK   r   zLinePlot._make_plot  s   &t||A		BD

AMMEB  "A JJE dii0B++-&&(:(:(<=!!#&r]MAzqaB99>>#Dzz% $

W22 KE4 ((uA(>F''D 'E**5*:E!DM	 ''	 	H ..x{EB! &b)&uoeD%(M +rM   Nc                    |dk(  r| j                  ||t        |             | j                  ||||d         }t        j                  |||fd|i|}	| j                  |||       |	S )Nr   ra   rJ   )_initialize_stackerr   _get_stacked_valuesrO   r  _update_stacker)
r   r   r  r  rJ   r[  r\  r   y_valuesr   s
             rK   r  zLinePlot._plot"  sn     ?##BSV<**2{AtG}Mb!XCUCdCBQ/rM   c                   t        |||      \  }}t        ||       t        |d      rt        |j                  |       t        |d      rt        |j                  |       |j
                  j                  || j                  |f        | j                  ||j                  t        j                  |j                        fd|i|}t        ||j                  |j                         |S )Nr   r   rJ   )r3   r0   r   r   r   
_plot_datar   rT   r  rn  r   r   r   r1   freq)rS   r   r  r[   rJ   r   rk  r   s           rK   r]  zLinePlot._ts_plot6  s    
 $D"d3
d 	b$2y!"**d+2z""++t,
dDJJ56

2tzz2::dkk+BX%XSWX 	BGGTZZ0rM   c                F    | j                   rt        | j                        S y rW   )r`   idr[   rR   s    rK   r^  zLinePlot._get_stacking_idM  s    <<dii= rM   c                    |y t        |d      si |_        t        |d      si |_        t        j                  |      |j                  |<   t        j                  |      |j                  |<   y )N_stacker_pos_prior_stacker_neg_prior)r   ro  rp  r   zeros)r   r   r\  ns       rK   re  zLinePlot._initialize_stackerT  sc     r/0$&B!r/0$&B!-/XXa[k*-/XXa[k*rM   c                   ||S t        |d      s| j                  ||t        |             |dk\  j                         r|j                  |   |z   S |dk  j                         r|j
                  |   |z   S t        d| d      )Nro  r   zWWhen stacked is True, each column must be either all positive or all negative. Column 'z,' contains both positive and negative values)r   re  r   allro  rp  rk   )r   r   r\  r   ra   s        rK   rf  zLinePlot._get_stacked_valuesd  s    
 Mr/0##BS[AaK %%k2 k  %%k2
 gIK
 	
rM   c                    |y |dk\  j                         r|j                  |xx   |z  cc<   y |dk  j                         r|j                  |xx   |z  cc<   y y r  )rt  ro  rp  )r   r   r\  r   s       rK   rg  zLinePlot._update_stacker  s^     aK!!+.&8.k !!+.&8. !rM   c                j   ddl m} fd}| j                  rW|j                         }|D cg c]
  } ||       }}|j                  j                   ||             |j                  |       | j                          xrO j                  j                  xr | j                  xr) | j                   xs | j                  xr | j                  }| j                         }	|r*| j                  sd| _        t!        || j                         |	| j                  r|j#                  |	       y y y c c}w )Nr   )FixedLocatorc                    t        |       r| j                         rt        |       } 	 t        j                  |          S # t
        $ r Y yw xY w)Nr(  )r   r   r  r*   rn  	Exception)r  r[   s    rK   	get_labelz,LinePlot._post_plot_logic.<locals>.get_label  sE    {q||~F#DJJqM22 s   A 	AA   )r   )matplotlib.tickerrw  r  
get_xticksrI  set_major_locatorset_xticklabelsrU  rn  _is_all_datesr   ru   rw   r  r   r   r7   r  )
rS   r   r[   rw  rz  r{   r  xticklabels	conditionr  s
     `       rK   r   zLinePlot._post_plot_logic  s
   2	 ""]]_F178A9Q<K8 HH&&|F';<{+ ##%% G))<dnnG]]"Et}}'D 	 ))+
 ==rtxx0!dnnMM*% '5!5 9s   D0r  rB   )r  z-Literal['line', 'area', 'hist', 'kde', 'box']r  )r  r   r  )NNN)r   r=   r  r  rW   )r   r=   r[   rD   )r  r  )r   r=   rr  r  r  r  )r   r=   r\  r  r   r  r  r  )r   r=   r\  r  r  r  r  )r  r  r  r   r  rY   rT   r   r   rV  rU  r   r  r  r]  r^  re  rf  rg  r   rX   rM   rK   rH  rH    s4   L   < N N 9 9<)~   	 &  ,   9  9 

$.
8B
	
  
8 9  9(&rM   rH  c                  T    e Zd Zedd       ZddZe	 	 	 	 d	 	 	 	 	 d	d       Zd
dZy)AreaPlotc                     y)Nr   rX   rR   s    rK   rT   zAreaPlot._kind  rM  rM   c                   |j                  dd       t        j                         5  t        j                  ddt               |j                  d      }d d d        t        j                  | |fi | | j                  s| j                  j                  dd	       | j                  s| j                  rt        d
      y # 1 sw Y   lxY w)Nr`   Trv  zDowncasting object dtype arrays)r4  r   rP  alphar  z+Log-y scales are not supported in area plot)
setdefaultr   r  r  FutureWarningrS  rH  r   r`   r   r]   r^   rk   )rS   r[   r  s      rK   r   zAreaPlot.__init__  s    )T*$$&##1&
 ;;Q;'D ' 	$//||II  #.99JKK $ '&s   /CC
Nc                   |dk(  r| j                  ||t        |             | j                  ||||d         }	|j                         }
|
j	                  d       t        j                  |||	fd|i|
}|d   j                  d      \  }}	|t        j                  t        |            }nd|dk\  j                         r|j                  |   }nA|dk  j                         r|j                  |   }nt        j                  t        |            }d|vr|d   j                         |d<    |j                  |||	fi |}| j                  |||       |g}|S )Nr   ra   rJ   F)origrh   )re  r   rf  r.  r   rO   r  get_datar   rq  rt  ro  rp  	get_colorfill_betweenrg  )r   r   r  r  rJ   r[  r\  r  r   rh  	line_kwdsr   xdatastartrectress                   rK   r  zAreaPlot._plot  sJ    ?##BSV<**2{AtG}M IIK	gb!XHUHiH  (+++7x HHSV$E1f\\^))+6E1f\\^))+6EHHSV$E$!!H..0DMrueX>>BQ/ f
rM   c                l   t         j                  | ||       t        t        |j	                                     dkD  }| j
                  l|si|dk\  j                         j                         r|j                  dd        y |dk  j                         j                         r|j                  d d       y y y y r  )rH  r   r   r   get_shared_y_axesr~   rt  rW  )rS   r   r[   is_shared_ys       rK   r   zAreaPlot._post_plot_logic  s    !!$D1$r33567!;99[	 $$&At$!)"&&(D!$ ) &1rM   )r  zLiteral['area']r  )NNNFr  r  )	r  r  r  r  rT   r   r  r  r   rX   rM   rK   r  r    s^     L&  !++ 	+ + +Z	%rM   r  c                      e Zd Zedd       ZdZedd       Zddddddd	 dd	Zedd
       Z	ed        Z
ed        Ze	 	 d	 	 	 	 	 	 	 dd       Zed        ZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZy)BarPlotc                     y)Nr   rX   rR   s    rK   rT   zBarPlot._kind      rM   Z   c                     yrJ  rX   rR   s    rK   rY   zBarPlot.orientation  rK  rM   centerr   r  F)alignbottomrb  widthpositionr   c               v   t        |t              | _        || _        || _        || _        t        j                  t        |            | _	        t        |      rt        j                  |      }t        |      rt        j                  |      }|| _        || _        || _        t        j                   | |fi | y rW   )ro   r&   
_is_series	bar_width_align	_positionr   aranger   tick_posr   r  r  rb  r   rO   r   )	rS   r[   r  r  rb  r  r  r   r  s	            rK   r   zBarPlot.__init__  s     %T95!		#d),XXf%F88D>D	t.v.rM   c                4    | j                   | j                  z
  S rW   )r  
tickoffsetrR   s    rK   ax_poszBarPlot.ax_pos5  s    }}t..rM   c                *   | j                   s| j                  r| j                  | j                  z  S | j                  dk(  r;| j                  | j
                  z  }| j                  | j                  dz
  z  |dz  z   S | j                  | j                  z  S )Nedger  )r`   ru   r  r  r  r   rS   ws     rK   r  zBarPlot.tickoffset9  st    <<4==>>DNN22[[F"-A>>T^^c%9:QWDD>>DNN22rM   c                    | j                   s| j                  r| j                  dk(  r| j                  dz  S y| j                  dk(  r| j                  | j                  z  }|dz  S y)Nr  r  r   r  )r`   ru   r  r  r   r  s     rK   
lim_offsetzBarPlot.lim_offsetC  sW    <<4=={{f$~~))[[F"-As7NrM   c                2     |j                   |||f||d|S )N)r  r   )r   r   r   r  r  r  r  r   r   s           rK   r  zBarPlot._plotQ  s%     rvvaA=e===rM   c                    | j                   S rW   )r  rR   s    rK   _start_basezBarPlot._start_base^  r  rM   c                0   | j                         }t        |      }t        j                  t        | j                              x}}| j
                  }| j                  j                  d      }t        | j                  |            D ]  \  }\  }	}
| j                  |      }| j                  j                         }| j                  r||d<   n$t        |t              r	||	   |d<   n|||z     |d<   | j                  |	|      }t        |fi |}t!        |	      }	| j#                  |	|      }	d|v sd|v r'|j%                  d      t&        j(                  d	   |d<   d}| j*                  r|
d
k\  j-                         rd
}|| j.                  z   }| j0                  |d<   | j2                  r\| j4                  dz  } | j6                  || j8                  |z   |
| j4                  f||	| j*                  d|}|j;                  |	       n| j<                  r|
dkD  }t        j>                  |||      | j.                  z   }| j4                  dz  } | j6                  || j8                  |z   |
| j4                  f||	| j*                  d|}|t        j>                  ||
d      z   }|t        j>                  |d|
      z   }nF| j4                  |z  } | j6                  || j8                  |dz   |z  z   |
|f||	| j*                  d|}| jA                  ||	        y )Nr   r%  rh   rY  rZ  rf   re   r  zxtick.colorr   r  r  )r  ra   r   r  )!r  r   r   rq  r[   r   rS  r  r   rE  r   r.  r  ro   r  r  r*   ro  r  rz  r   r   rt  r  r  ru   r  r  r  r[  r`   whererr  )rS   r   r   ncolors	pos_prior	neg_priorKr[   r  ra   r  r   r   r   r  r  r  r  s                     rK   r   zBarPlot._make_plotb  s   !!#f+ "TYY 88	ILLyy"&tD'ABMAzqaB99>>#D &WFD) &uW &q7{ 3W((uA(>F''D 'E**5*:E4Vt^488H;M;U!$m!<XExxQ!VLLND,,,E KKDM}}NNQ&!tzzKK!ONN		
  	 	 U#1uy)<t?O?OONNQ&!tzzKK!ONN		
  	 	 &q!(<<	%q!(<<	NNQ&!tzzKK1s7a-/		
  	 	 ..tU;E CrM   c                   | j                   r#|j                  D cg c]  }t        |       }}n.t        |j                  d         D cg c]  }t        |       }}| j
                  d   dz
  | j                  z   }| j
                  d   dz   | j                  z   | j                  z   }| j                  || j                         |||       y c c}w c c}w )Nr   g      ?r   )
r   rn  r*   r  r   r  r  r  _decorate_ticksr  )rS   r   r[   key	str_indexs_edgee_edges          rK   r   zBarPlot._post_plot_logic  s    >>6:jjAjsc*jIA6;DJJqM6JK6Jsc*6JIKQ$&8R4'$..84??JR!5!5!7FFS BKs   C
Cc                :   |j                  ||f       | j                  /|j                  t        j                  | j                               n,|j                  | j
                         |j                  |       || j                  r|j                  |       y y y rW   )	rX  r{   rV  r   r  r  r  r   r  rS   r   r)  
ticklabels
start_edgeend_edges         rK   r  zBarPlot._decorate_ticks  sv     	Z*+;;"MM"((4;;/0MM$--(z*MM$ !/rM   N)r  zLiteral['bar', 'barh']r  r  )r  r  r   Fr   r=   r  r  r  zint | npt.NDArray[np.intp]r   r   r  r  r   r=   r)  r  r  z	list[str]r  r   r  r   r  r  )r  r  r  r  rT   r   rY   r   r   r  r  r  r  r  r  r   r   r  rX   rM   rK   r  r    s.     L  / 
/> / / 3 3 
 
  -.
>
> 	
> *
> 
> 
>  J<X	T     	 
     
 rM   r  c                      e Zd Zed	d       ZdZed
d       Zed        Ze	 	 d	 	 	 	 	 	 	 dd       Z	d Z
	 	 	 	 	 	 	 	 	 	 	 	 ddZy)BarhPlotc                     y)Nr   rX   rR   s    rK   rT   zBarhPlot._kind  rM  rM   r   c                     y)NrG  rX   rR   s    rK   rY   zBarhPlot.orientation  s    rM   c                    | j                   S rW   )rb  rR   s    rK   r  zBarhPlot._start_base  s    yyrM   c                2     |j                   |||f||d|S )N)rb  r   )r   r  s           rK   r  zBarhPlot._plot  s%     rwwq!Q<U<t<<rM   c                    | j                   S rW   )r   rR   s    rK   r  zBarhPlot._get_custom_index_name  s    {{rM   c                    |j                  ||f       |j                  | j                         |j                  |       || j                  r|j                  |       |j                  | j                         y rW   )rW  rU  r  r!  r   rY  r  r   r  s         rK   r  zBarhPlot._decorate_ticks  s]     	Z*+
dmm$
:&MM$ 	dkk"rM   N)r  zLiteral['barh'])r  zLiteral['horizontal']r  r  r  )r  r  r  r  rT   r   rY   r  r  r  r  r  rX   rM   rK   r  r    s      L     -.
=
= 	
= *
= 
= 
=## # 	#
 # # 
#rM   r  c                  n     e Zd Zedd       ZdZd	d
dZe	 	 	 	 	 	 d fd       Zd
dZ	ddZ
ddZ xZS )PiePlotc                     y)Nr   rX   rR   s    rK   rT   zPiePlot._kind  r  rM   rG  c                    |j                  d      }|dk  j                         j                         rt        | j                   d      t	        j
                  | |fd|i| y )Nr   rP  z# plot doesn't allow negative valuesrd   )rS  r   rk   rT   rO   r   )rS   r[   rd   r  s       rK   r   zPiePlot.__init__  sZ    {{{#1H>>!

|+NOPPt9$9&9rM   c                    t         |   ||       |dur(t        j                  d| dt        t                      y)N)r   r   FzPiePlot ignores the 'z	' keywordr   )r  r   r   r   r  r   )r   r   r   r  s      rK   r   zPiePlot._validate_log_kwd  sE     	!c!7MM'uI6+-
 rM   c                     y rW   rX   )rS   rh   r   s      rK   r   zPiePlot._validate_color_args  rZ   rM   c           	        | j                  t        | j                        d      }| j                  j	                  d|       t        | j                  | j                              D ]O  \  }\  }}| j                  |      }|t        |      }|j                  |       | j                  j                         }d }| j                  j                  D 	cg c]  }	t        |	       }
}	|j                  d|
      }|&t        ||      D cg c]  \  }} |||       }}}nd } |j                  |fd|i|}|j                  dd       |\  }}}n|\  }}g }| j                   %||z   D ]  }|j#                  | j                           ||n|
}t        ||      D ]  \  }}| j%                  ||        R y c c}	w c c}}w )Nr   )r  r  r%  c                    |dk(  ry| S )Nr   r(  rX   )ra   r   s     rK   blank_labelerz)PiePlot._make_plot.<locals>.blank_labeler,  s    A: LrM   re  autopct)r  r   r[   r   r  r  r   rE  r*   rY  r.  rn  r   rZ  r   r  r   rc  rr  )rS   r   r   r  ra   r  r   r   r  vidxre  rb  r   blabelsresultspatchestexts	autotextst	leglabels_patch	_leglabels                          rK   r   zPiePlot._make_plot   s   !!S^!Q		Xv.&tDII'FGMAzqaB $U+e$99>>#D! -1IIOO<Oq<?OC<XXh,F !ILVUVX+$=u5XbffQ7w7$7Gxx	4(4,3)	!(	}}(*ANN4==1 + #)"4#I%()%<!	2269E &=K H = Ys   F<Gc                     y rW   rX   rL  s      rK   r   zPiePlot._post_plot_logicL  rF  rM   )r  zLiteral['pie']rW   r  r  r  r  )r  r  r  r  rT   r  r   r  r   r   r   r   r:  r;  s   @rK   r  r     sb       L:  , 
&	 *FXrM   r  )rJ   r   r  r   )o
__future__r   abcr   r   collections.abcr   r   r   r	   typingr
   r   r   r   r   r   r3  rz  numpyr   pandas._libsr   pandas.errorsr   pandas.util._decoratorsr   pandas.util._exceptionsr   pandas.core.dtypes.commonr   r   r   r   r   r   r   r   r   r   r   pandas.core.dtypes.dtypesr   r    pandas.core.dtypes.genericr!   r"   r#   r$   r%   r&   pandas.core.dtypes.missingr'   pandas.core.commoncorecommonrl   pandas.core.framer(   pandas.util.versionr)   pandas.io.formats.printingr*   pandas.plotting._matplotlibr+   %pandas.plotting._matplotlib.converterr,   #pandas.plotting._matplotlib.groupbyr-    pandas.plotting._matplotlib.miscr.   !pandas.plotting._matplotlib.styler/   &pandas.plotting._matplotlib.timeseriesr0   r1   r2   r3   r4   !pandas.plotting._matplotlib.toolsr5   r6   r7   r8   r9   r:   matplotlib.artistr;   r  r=   matplotlib.axisr>   matplotlib.figurer?   pandas._typingr@   rA   rB   rC   pandasrD   rL   rO   r  r  r=  rH  r  r  r  r  rX   rM   rK   <module>r     s9   "       - 2 4     ,     ' ' 3 - W H C A   ($$(  2n(c n(b#30 30lG) GT% %Pq&w q&hO%x O%d g  D0#w 0#fMg MrM   