U
    sVc`M                    @   s  d Z ddlmZmZ ddlZddlZddlZddlZddlZddl	Z	ddl
m  mZ ddlmZ ddlZddlmZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZ ddl m!Z! zddl"m#Z# W n e$k
r   d	d
 Z#Y nX ej%G dd deZ&dd Z'dS )z Test cases for DataFrame.plot     )datedatetimeN)is_list_like)	DataFrame
MultiIndexPeriodIndexSeriesbdate_range
date_range)TestPlotBase_check_plot_workspprint_thing)mpl_ge_3_6_0c                   C   s   dS )NT r   r   r   J/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/plotting/frame/test_frame.py<lambda>'       r   c                   @   s  e Zd Zejje ddejjdd Zdd Z	ejjdd Z
d	d
 Zdd Zdd Zdd Zejdddgdd Zejddddgdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zejd(d)d*gd+d, Zd-d. Zd/d0 Zejjd1d2d3ejd4d5d1gd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA Z dBdC Z!dDdE Z"dFdG Z#dHdI Z$dJdK Z%ejdLd5d1gejdMdNdOdPgdOdPdNgfdQdR Z&ejdSdTdUdVgdWdX Z'dYdZ Z(d[d\ Z)d]d^ Z*d_d` Z+ejjdadb Z,dcdd Z-dedf Z.dgdh Z/e0j1didj Z2e0j1dkdl Z3dmdn Z4ejdodpe5j6dqdr dpe5j6dsdr gdtdu Z7d!dwdxZ8dydz Z9d{d| Z:d}d~ Z;dd Z<ejdddddgdd Z=dd Z>e0j1dd Z?dd Z@dd ZAdd ZBejdddgddfdgddgddgfgdd ZCdd ZDejdddgdfgdd ZEejdddgdgdgfdddgddgddgfdddgddgddgfgdd ZFejdddddgfddddgfgdd ZGdd ZHdd ZIejdi dfddidfddidfgdd ZJdd ZKdd ZLejjdd ZMejjejd(d)ddgddń ZNejjdeOdǍddɄ ZPdd˄ ZQejjdd̈́ ZRejd(d)ddgddτ ZSddф ZTddӄ ZUddՄ ZVddׄ ZWddل ZXddۄ ZYe0j1dd݄ ZZdd߄ Z[dd Z\dd Z]ejdd)ddgdd Z^dd Z_dd Z`ejd(d)d*gdd Zadd Zbdd Zcdd Zde0j1ejd(ddd Zedd Zfdd Zgdd Zhejddddd gdd Zidd Zjdd Zkejd(ddd	 Zlejd
dddddvdddgfgejd(d)d*dgdd Zmejdddddgejd(ddgdd Znejdddd Zodd  ZpdvS ("  TestDataFramePlotszApi changed)reasonc           
   	   C   s  t  }t|jdd t|jddd}| j|ddd t|jdddd	}| j|dd
d t|jdddd}| j|dd | j|ddd tddgddgd}d}tjt	|d |jj
dd W 5 Q R X ttjddttjd d d}t|jdd}| j|dd t|jdd t|jdddgd t|jdddgd t|jddd t|jdddd |jddd }| j|dd!d |d d D ]P}| |j | j| dd" | j|jdd#dd" | j|j gdd" q|d fD ]@}| |j | |  | |j g | j|dd qt|jdd$ ttjd d td}ttjddt|d}t|jdd}| j|dd tjd%d&d'd(d)d*d+d,gd-d.gd/}tjd0d1gd2d3gd/}ttjddd4||d5}t|jd6d$ td7tjdi}t|jjdd8}| j|dd9d t|jjdd:d;}| j|dd9d | j \}}|jjd|d<}t|dksnt|j}	|	|d kstd S )=NF)ZgridTdefault_axessubplots   r      axes_numlayout)   )r   r   r   r    r    )r   r   	use_indexr   xrotr   r       xyz''Line2D' object has no property 'blarg'match)Zblarg
   index)r"   Zsort_columns   )yticks)xticks)id   )ylimZxlimZblah)r   r   title)r   r4   r%   r   Zvisibleminor)r4   )   αr   )r9   r   )   βr    )r:   r%   )   γr   )r;   r/   )   δ   )r<      Zi0i1)names)baru   Δ)rA   u   ΕZc0Zc1)   r    columnsr-   u   Σr'   r   r   r   )r   r   )r   r   r   ax) tmmakeTimeDataFramer   plot_check_axes_shape_check_ticks_propsr   pytestraisesAttributeErrorlinenprandomrandliststringascii_letters_check_visiblexaxisget_xticklabels	get_labelzipranger   from_tuplesrandintrA   pltr   lenAssertionErroraxes)
selfdfrc   msgrH   Ztuplesr-   rD   figresultr   r   r   	test_plot,   s    $
 zTestDataFramePlots.test_plotc              
   C   s  ddd ddg}t ddddd	gddddd	gtjd
d	tjddgtdtj|dddtj|ddddd}t|j	ddd t|ddg j	ddd t|ddg j	ddd t|ddg j	ddd t|ddg j	ddd t|ddg j	ddd t|ddg j	ddd d S )NZ2008Z2009Z2011Z2012r   r    r%   r   r/   r>   dtypez%Y)formati8T)rl   utc)ABCDEro   rp   r&   rq   rr   rs   )
r   rR   arraynanobjectpdZto_datetimeviewr   rK   )rd   datesre   r   r   r   test_nullable_int_plot   s     
z)TestDataFramePlots.test_nullable_int_plotc                 C   s   t jddddgdd}t|}t|jj t|jj t|jj t|jj t	||d}t|jj t|jj t|jj t|jjdd	 t|jj
d
dd t|jjd
dd d S )Nr   r    r%   r   ZUInt32rj   r&   r(   r(   r'   )rw   rt   r   r   rK   rQ   rA   histpier   scatterhexbin)rd   Zarrsre   r   r   r   test_integer_array_plot   s    z*TestDataFramePlots.test_integer_array_plotc                 C   s:   t dddgdddgd}| }t| dks6td S )Nr'   r(   zr   r    r%   ro   rp   )r   rK   ra   	get_linesrb   rd   re   rH   r   r   r   test_nonnumeric_exclude   s    z*TestDataFramePlots.test_nonnumeric_excludec                 C   s@   t tjdddddgd}|jddd}| |j d d S )Nr+   r%   abcrD   r&   )r   rR   rS   randnrK   _check_text_labelsrY   r[   r   r   r   r   test_implicit_label   s    z&TestDataFramePlots.test_implicit_labelc                 C   sD   t tjddddgd}d|j_|jddd |jjdks@td S )Nr    r   r   r   NAMEZLABEL)r(   label)r   rR   rS   r   r-   namerK   rb   rd   re   r   r   r   test_donot_overwrite_index_name   s    z2TestDataFramePlots.test_donot_overwrite_index_namec                 C   sj  t  }| |jddd|dd   | |jdd|d  | |jdd|j  | |jddd|dj  | |jdd|d  | |jdd|j  tdt|j	d |_	| |jddd|dd   | |jdd|d  | |jdd|d   |jddd	d
d}| 
|jd	 | j|dddd d S )Nr   r   r&   ro   rp   r'   r{   r    ZTest)   rB   )r'   r(   r4   figsizerF   )g      0@g       @)r   r   r   )rI   rJ   Z_check_datarK   	set_indexrp   rR   arangera   rD   r   r4   rL   r   r   r   r   test_plot_xy   s    $"$zTestDataFramePlots.test_plot_xyzinput_log, expected_log)Tlog)symZsymlogc                 C   s   t dtditdd}|j|d}| j||d | |ksFt|j|d}| j||d | |kspt|j|d}| j|||d	 | |kst| |kstd S )
Nr   r2   r,   logyyaxis)logxrY   loglog)rY   r   )r   rR   r   rK   _check_ax_scalesZ
get_yscalerb   Z
get_xscale)rd   Z	input_logZexpected_logre   rH   r   r   r   test_logscales   s    z!TestDataFramePlots.test_logscalesinput_paramr   r   r   c              	   C   sN   t dtditdd}d}tjt|d |jf |di W 5 Q R X d S )Nr   r2   r,   z9Boolean, None and 'sym' are valid options, 'sm' is given.r)   sm)r   rR   r   rN   rO   
ValueErrorrK   )rd   r   re   rf   r   r   r   test_invalid_logscale   s    z(TestDataFramePlots.test_invalid_logscalec              	   C   s  t  }|jdd}| }t|d  tr2t| j|dd t 	  dt
jd< | }| }t|d  trxt| j|dd t 	  dt
jd< | }| }t|d  trttt|d  tstt 	  t
jdd< | }| }t|d  trt| j|dd W 5 Q R X t 	  | }| }t|d  tr`ttt|d  ts|t| j|dd d S )	NT)x_compatr      r#   zxaxis.compatFr   )rI   rJ   rK   r   
isinstance	get_xdatar   rb   rM   closeplottingZplot_paramsZuse)rd   re   rH   linesr   r   r   test_xcompat  s:    

zTestDataFramePlots.test_xcompatc                 C   sT   t tjddttdddtdddddgd}|  | jjd	d
 t	
  d S )N   r      r      r   r   r-   rD   r   r{   )r   rR   rS   rT   r	   r   rK   r`   ZaxhlinerI   r   r   r   r   r   test_period_compat(  s    z%TestDataFramePlots.test_period_compatc                 C   s   t dtditdddtjd}| }| d }| }t|d d df |d d df tjdd}tj	||j
d	d
 t  tjtdddtjd|_| }| d }| }t|d d df |d d df tjdd}t	||j
 d S )Nr(   r2   c   r   )r-   rk   r   r   )rk   r   F)Zcheck_index_typerj   )r   rR   r   Zint64rK   r   Z
get_xydatar   rI   Zassert_series_equalr(   r   rw   Indexfloat64r-   )rd   re   rH   r   rsr   r   r   test_unsorted_index5  s"      **z&TestDataFramePlots.test_unsorted_indexc              	   C   s  t dddddgiddddgd}| }| \}}| }|t|d  d ksZt|t|d  d ksxtt dddtj	ddd	d
giddddtj	ddgd}| }| \}}| }|t|d  d kst|t|d  d kstt ddddgddddgd}|jddd}| \}}| }|t|d  d ksbt|t|d  d kstd S )Nr(                 ?       @      @r,   r   g      @g      @g      @g     V@g     V@g     @W@g      W@)r(   r   r   r&   )
r   rK   get_xlimr   rR   Znanminget_datarb   Znanmaxru   )rd   re   rH   xminxmaxr   r   r   r   test_unsorted_index_limsG  s*       z+TestDataFramePlots.test_unsorted_index_limsc              	   C   s   t tjddttjd d ddddgd }d}tjt	|d	 |j
jd
d W 5 Q R X tjt	|d	 |j
jd
d W 5 Q R X d S )Nr=   r   r'   r(   r   fourr   z+Log-y scales are not supported in area plotr)   Tr   r   )r   rR   rS   rT   rU   rV   rW   rN   rO   r   rK   areard   re   rf   r   r   r   test_negative_log`  s    
z$TestDataFramePlots.test_negative_logc                 C   sZ   t t|d  d }t||D ]0\}}|| d 7 }| d }t|| q$d S )Nr   r   )rR   zerosra   r   r\   rI   assert_numpy_array_equal)rd   Znormal_linesZstacked_linesbasenlslsyr   r   r   _compare_stacked_y_coodl  s
    z*TestDataFramePlots._compare_stacked_y_coodkindrQ   r   c           
   
   C   s  t d ttjddddddgd}| }ttjdtjdtjd tjd d	}ttjddttj	d d ddddgd
}t
|j|dd}t
|j|dd}| |j|j t
|j|dd}t
|j|dd}| |j|j t
|j|dd}t
|j|dd}| |jd d |jd d  | |jdd  |jdd   t
|jdd d}tjt|d |jdd W 5 Q R X ||jd }	t
|	j|ddd W 5 Q R X d S )N*   r=   r   wr'   r(   r   r   )r   r'   r(   r   r   F)r   stackedTr    r   zWhen stacked is True, each column must be either all positive or all negative. Column 'w' contains both positive and negative valuesr)   r   )r   r   r   )rI   
RNGContextr   rR   rS   rT   r   rU   rV   rW   r   rK   r   r   rN   rO   r   r   r-   )
rd   r   re   neg_dfZsep_dfZmixed_dfax1ax2rf   df2r   r   r   test_line_area_stackeds  s@    

	
  z)TestDataFramePlots.test_line_area_stackedc              
   C   s  ddt jdg}dt jddg}t||d}t||dtjddd}||fD ]}t|j}|jd  }|jd  }t j	dddgt j
d	}	tt |jd|	 t j	dddgt j
d	}	tt |jd|	 t|jt 	d
d
dd
g t|jt 	d
dd
d
g t j	ddddgt j
d	}
t j	ddddgt j
d	}t|jdd}t|jd  |
 t|jd  |
|  t|jj}t|jd  |
 t|jd  |
|  t|jjd
d}t|jd  |
 t|jd  | qLd S )Nr   r    r%   r   r   r   )kr,   r   rj   FTr   )rR   ru   r   rI   ZmakeDateIndexr   rK   r   	get_ydatart   r   r   deletedatamaskr   )rd   Zvalues1Zvalues2re   tdfdrH   Zmasked1Zmasked2expZ	expected1Z	expected2r   r   r   test_line_area_nan_df  s>    
  z(TestDataFramePlots.test_line_area_nan_dfc                 C   s`  t tjdddddgd}| }| \}}| }||d  d d ksTt||d  d d kspt|jd	d
}| \}}| }||d  d d kst||d  d d kst|jd	d	d}| j	|ddd |D ]p}t
|dstt
|drt| \}}| }||d  d d ks>t||d  d d kstqd S )Nr=   r%   r'   r(   r   r   r   r   T)secondary_y)r   r   r5   r   Zleft_axright_ax)r   rR   rS   rT   rK   r   r   r   rb   rL   hasattr)rd   re   rH   r   r   r   rc   r   r   r   test_line_lim  s(    z TestDataFramePlots.test_line_limFzX2020-12-01 this has been failing periodically on the ymin==0 assertion for a week or so.)strictr   r   Tc           
      C   s   t tjddddddgd}| }t|jj|d}| \}}| \}}|	 }	||	d	 
 d	 d	 kspt||	d	 
 d	 d
 kst|d	kstt|jj|d}| \}}|d	kstd S )Nr=   r   r'   r(   r   r   r   r   r   r   )r   rR   rS   rT   r   rK   r   r   get_ylimr   r   rb   )
rd   r   re   r   rH   r   r   ZyminZymaxr   r   r   r   test_area_lim  s    z TestDataFramePlots.test_area_limc                 C   s   t tjddddgd}| jjdddd\}\}}|j|d	d
 |j|d	d
 | |||sft	| |||s|t	d S )Nr   r    r'   r(   r   r   T)shareyr   )rH   r   )
r   rR   rS   rT   r`   r   rK   Z
get_y_axisZjoinedrb   )rd   re   rg   r   r   r   r   r   test_area_sharey_dont_overwrite  s    z2TestDataFramePlots.test_area_sharey_dont_overwritec                 C   s   t tjdd}|jjdd}|jD ]}| dks&tq&|jjddd}|jD ]}| dksRtqR|jjddd}| j	|ddd |D ] }|jD ]}| dkstqqd S )	Nr/   r    )	linewidthT)r   r   )r   r   )r/   r   r   )
r   rR   rS   r   rK   rA   patchesZget_linewidthrb   rL   )rd   re   rH   rrc   r   r   r   test_bar_linewidth  s    


z%TestDataFramePlots.test_bar_linewidthc                 C   sL  t tjdd}d}|jj|d}|jD ]}| |t|j	 ks*t
q*|jjd|d}|jD ]}| |ks`t
q`|jj|d}|jD ]}| |t|j	 kst
q|jjd|d}|jD ]}| |kst
q|jj|dd}|D ] }|jD ]}| |kst
qq|jj|dd}|D ]&}|jD ]}| |ks*t
q*q d S )Nr/   g?)widthT)r   r   )r   r   )r   rR   rS   r   rK   rA   r   	get_widthra   rD   rb   barh
get_height)rd   re   r   rH   r   rc   r   r   r   test_bar_barwidth  s,    





z$TestDataFramePlots.test_bar_barwidthc              	   C   s  t tjdd}|jjddd}dd |jD }|dgd ksDt|jjdd	d
dddgd}dd |jd d D }|d	d
dddgkst|jjdt	dddddgd}dd |jD }|dgd kst|jjddddddgd}dd |jd d D }|dddddgkst|jjdd	d}|D ]*}dd |jD }|d	gd ks,tq,|jjdt	dddddgd}|D ]*}dd |jD }|dgd ks|tq|d S )Nr/   Fr   )r   bottomc                 S   s   g | ]}|  qS r   Zget_y.0pr   r   r   
<listcomp>@  s     z;TestDataFramePlots.test_bar_bottom_left.<locals>.<listcomp>   Tr   c                 S   s   g | ]}|  qS r   r   r   r   r   r   r   D  s     )r   leftc                 S   s   g | ]}|  qS r   get_xr   r   r   r   r   H  s     r    r%   r   c                 S   s   g | ]}|  qS r   r  r   r   r   r   r   L  s     )r   r   c                 S   s   g | ]}|  qS r   r   r   r   r   r   r   Q  s     )r   r  c                 S   s   g | ]}|  qS r   r  r   r   r   r   r   V  s     )
r   rR   rS   rT   rK   rA   r   rb   r   rt   )rd   re   rH   rh   rc   r   r   r   test_bar_bottom_left=  s*      z'TestDataFramePlots.test_bar_bottom_leftc              	   C   s   t dtjdgdddgdddgd}|j }dddddddddg	}d	d
 |jD }||ks`t|jjdd}dd
 |jD }||kstdd
 |jD }dddddddddg	}||kstd S )Nr+      r/   r   r    r%   ro   rp   rq   r   c                 S   s   g | ]}|  qS r   r   r   r   r   r   r   ]  s     z3TestDataFramePlots.test_bar_nan.<locals>.<listcomp>Tr   c                 S   s   g | ]}|  qS r   r  r   r   r   r   r   a  s     c                 S   s   g | ]}|  qS r   r   r   r   r   r   r   d  s     r   g      $@g      4@g      .@g      D@)r   rR   ru   rK   rA   r   rb   )rd   re   rH   expectedrh   r   r   r   test_bar_nanY  s    $
zTestDataFramePlots.test_bar_nanc                 C   sD  t tjddttdttdd}t tjddttdttdd}||fD ]}|j	 }|j
 }t|tdddd	d
dg | dkst|jd  dkst|jd  dkst|jj	dd}t|tdddd	d
dg | dkst|jd  dks(t|jd  dks`tq`d S )Nr=   r/   ZABCDEFZabcder   r   r   r    r%   r   )g      g      @g      пr   g@Tr   g      @)r   rR   rS   r   rw   r   rU   ZCategoricalIndexrK   rA   rY   get_ticklocsrI   r   rt   r   rb   r   r  )rd   Zdf1r   re   rH   Zticksr   r   r   test_bar_categoricalh  s,    

z'TestDataFramePlots.test_bar_categoricalc              	   C   s   t tjddttjd d ddddgd}t|jj	ddd t|jj	d	d
d t
d}tjt|d |jj	dd W 5 Q R X t
d}tjt|d |jj	dd W 5 Q R X |jddddd}| j|d	dd d S )Nr=   r   r'   r(   r   r   r   r&   r   r    z5scatter() missing 1 required positional argument: 'y'r)   r   z5scatter() missing 1 required positional argument: 'x'r{   r~   T)r'   r(   r   r   rF   r   )r   rR   rS   r   rU   rV   rW   r   rK   r~   reescaperN   rO   	TypeErrorrL   )rd   re   rf   rc   r   r   r   test_plot_scatter  s    


z$TestDataFramePlots.test_plot_scatterc              	   C   s\   t tjddgd}tddddj|d< d}tjt|d	 |j	d
ddd W 5 Q R X d S )Nr+   r   r   z
2014-01-01h)startfreqperiodsZdtimez9must be a string or a (real )?number, not 'datetime.time'r)   r~   )r   r'   r(   )
r   rR   rS   r   r
   timerN   rO   r  rK   r   r   r   r   &test_raise_error_on_datetime_time_data  s
    z9TestDataFramePlots.test_raise_error_on_datetime_time_datac                 C   s`   t tdddddd}tjddt|}t||d}t|jj	dd	d
 t|jj	ddd
 d S )Ni  r      W)r  r  r  r   )ry   valsry   r  r&   )
r
   r   rR   rS   normalra   r   r   rK   r~   )rd   ry   r  re   r   r   r   test_scatterplot_datetime_data  s
    z1TestDataFramePlots.test_scatterplot_datetime_datac                 C   s   t dddgdddgd}t|jjdd	d
 t|jjddd
 t dddgdd	dgd}t|jjdd	d
 t|jjddd
 d S )Nro   rp   rq   r    r%   r   r   r   r   r&   r   r   r   )r   r   rK   r~   r   r   r   r   test_scatterplot_object_data  s    z/TestDataFramePlots.test_scatterplot_object_dataordered
categoriessetosa
versicolor	virginicac                 C   s   t ddgddgddgddgddggd	d
gd}tjdddddg||d|d< |jjdddd}|j\}|j}tdddg}|	 }t
|| tddddg}	|j}
t
|
|	 |}dd |j D }tdd t||D std S )Ngffffff@g      @g@r   g      @g	@g@g@lengthr   r   r  r   r  )r  r  Zspeciesr   r   r'   r(   r         ?g      ?g      @r   r   r   c                 S   s   g | ]}|  qS r   get_text)r   ir   r   r   r     s     zLTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<listcomp>c                 s   s   | ]\}}||kV  qd S Nr   )r   r&  jr   r   r   	<genexpr>  s     zKTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<genexpr>)r   rw   CategoricalrK   r~   collectionscolorbarrR   rt   Z	get_ticksrI   r   Z_boundariesrH   Zget_ymajorticklabelsallr\   rb   )rd   r  r  re   rH   Zcolorbar_collectionr,  Zexpected_ticksZresult_ticksZexpected_boundariesZresult_boundariesZexpected_yticklabelsZresult_yticklabelsr   r   r   %test_scatterplot_color_by_categorical  s*     
z8TestDataFramePlots.test_scatterplot_color_by_categoricalzx, yr&   )r(   r'   )r(   r(   c                 C   s:   t ddddgtddddgd}t|jj||d d S )	Nr   r    r%   r   r   r   r   r&   )r   rw   r*  r   rK   r~   rd   r'   r(   re   r   r   r   'test_plot_scatter_with_categorical_data  s    $z:TestDataFramePlots.test_plot_scatter_with_categorical_datac           
      C   s  ddl m} ttjjddddttjd d ddd	d
gd}|j	j
ddd	d|j	j
ddddg}|D ]R}|jd jjdkst| r|jd jj d	kstqf|jd jjd	ksftqfd}|j	j
ddd	|d}|jd jj|kst|j	j
ddd	dd}|jd jd kst|j	j
dddd}|jd jd ks:t| j|jdgd tddgddgd}ddddg}ddddg}t||g}|j	j
dd|d}t|jd  | tddg}	|j	j
dd|	dd d S ) Nr   )mpl_ge_3_4_0r2   )r=   r   )lowhighsizer=   r'   r(   r   r   r   r"  r   r    ZGreys	cubehelix)r'   r(   r   colormapF)r'   r(   r   r,  redr   Z
facecolorsr%   r   r   r   r   ro   rp   Zspring)r'   r(   r   cmap)"pandas.plotting._matplotlib.compatr1  r   rR   rS   r_   rU   rV   rW   rK   r~   r+  r9  r   rb   r,  rH   
get_ylabelZ_label_check_colorsrt   rI   r   Zget_facecolor)
rd   r1  re   rc   rH   cmZred_rgbaZ
green_rgbaZ
rgba_arrayZfloat_arrayr   r   r   test_plot_scatter_with_c  s8    
$z+TestDataFramePlots.test_plot_scatter_with_cc                 C   sR   t tjdd dddgd}|jjdddd}tj|d j|jd 	 d	 d S )
Nr+   r%   r2   r   r   r   r   )r'   r(   r   r   )right)
r   rR   rS   rK   r~   rI   r   valuesr+  Z	get_sizesr   r   r   r   test_plot_scatter_with_s  s    z+TestDataFramePlots.test_plot_scatter_with_sc                 C   s\   dd l }ttjdd dddgd}|j }|jjddd|d}|jd j	|ksXt
d S )	Nr   r?  r2   r   r   r   r   )r'   r(   r   norm)
matplotlibr   rR   rS   colorsZLogNormrK   r~   r+  rC  rb   )rd   mplre   rC  rH   r   r   r   test_plot_scatter_with_norm  s
    
z.TestDataFramePlots.test_plot_scatter_with_normc                 C   s   dd l }ttjdd dddgd}|jjdddd}|jd j}|j	 |j
 f}|jj| }|jD ]}||||ksjtqjd S )	Nr   r?  r2   r   r   r   r   r"  )rD  r   rR   rS   rK   r~   r+  rC  r   minmaxrE  Z	Normalizerb   )rd   rF  re   rH   Z	plot_normZcolor_min_maxZdefault_normvaluer   r   r   test_plot_scatter_without_norm$  s    
z1TestDataFramePlots.test_plot_scatter_without_normc                 C   s4  t tjddttjd d ddddgd}t|jj	 t|jj	dd	 t|jj	d
d
d t|jj	d
d t tjddttjd d t
dd}t|jj	 t ddgddgd}t|jj	}| j|dd |jj	ddd}| j|dddd t|jj}| j|dd |jjddd}| j|dddd d S )Nr=   r   onetwothreer   r   FlegendTr   r   r+      r   r   r   Z   r#   #   )rotfontsizer$   
xlabelsize
ylabelsize)yrot7      )rY  rX  rW  )r   rR   rS   r   rU   rV   rW   r   rK   rA   r]   rM   r   r   r   r   r   test_plot_bar0  s0    
z TestDataFramePlots.test_plot_barc           	      C   s.  |}|d }|  j}dd |D }t|jj}| | | t|j	
 tdt|d  t|jdt| ks|tt  |jjdd}| j|ddd	 t  t|jj}tdd
dg}|jj|d}|  j}dd |D }| | | t|j	
 | t|jdt| ks*td S )Nheightc                 S   s   g | ]}t |qS r   r   r   r   r   r   r   r   U  s     z3TestDataFramePlots.test_boxplot.<locals>.<listcomp>r   r>   (   rT  r   r$   rY  r=   )	positionsc                 S   s   g | ]}t |qS r   r   r^  r   r   r   r   h  s     )_get_numeric_datarD   r   rK   boxr   rZ   rI   r   rY   r
  rR   r   ra   r   rb   r   rM   rt   )	rd   hist_dfre   seriesnumeric_colslabelsrH   rc   rb  r   r   r   test_boxplotQ  s.    
 
zTestDataFramePlots.test_boxplotc           	      C   s8  |}|  j}dd |D }|jjdddd}| j|dddd | | | t|jd	t| ksjt	t
|jjd
d
dd
d}| j|ddd | j|dd t||D ],\}}| | |g t|jd	kst	qtdddg}|jj|dd}| | | t|j | t|jd	t| ks4t	d S )Nc                 S   s   g | ]}t |qS r   r   r^  r   r   r   r   p  s     z<TestDataFramePlots.test_boxplot_vertical.<locals>.<listcomp>2   rB   F)rT  rU  vertr   r$   rY  rX  r>   T)r   r   rk  r   r%   )r   r%   r   r   r   r    )rb  rk  )rc  rD   rK   rd  rM   r   get_yticklabelsra   r   rb   r   rL   r   r\   rR   rt   rI   r   r   r
  )	rd   re  re   rg  rh  rH   rc   r   rb  r   r   r   test_boxplot_verticalm  s0    
z(TestDataFramePlots.test_boxplot_verticalc              	   C   s   t tjddttjd d ddddgd}d}tjt	|d	 |j
jd
d W 5 Q R X |j
jdd}| |d |j
jdd}| |d |j
 }| |d |j
jdd}| |d d S )Nr=   r   rL  rM  rN  r   r   z2return_type must be {None, 'axes', 'dict', 'both'}r)   Z
not_a_type)return_typedictrc   Zboth)r   rR   rS   r   rU   rV   rW   rN   rO   r   rK   rd  Z_check_box_return_type)rd   re   rf   rh   r   r   r   test_boxplot_return_type  s     

z+TestDataFramePlots.test_boxplot_return_typec                 C   s   t tjdd}t|jdd}dd |jD }| j||d | j|dd	 |jdd
dd}| j|d
ddd t|jdddd}| j	|ddd |jdddd}| j
|dd d S )Nr2   r   kder   c                 S   s   g | ]}t |qS r   r   r^  r   r   r   r     s     z2TestDataFramePlots.test_kde_df.<locals>.<listcomp>rh  r   r#   r  r/   )r   rT  rU  rV  T)r   r   r   r   r   )r   r   r   r   r   )r   rR   rS   r   r   rK   rD   _check_legend_labelsrM   rL   r   )rd   re   rH   r  rc   r   r   r   test_kde_df  s     zTestDataFramePlots.test_kde_dfc                 C   s0   t tjjdd}tj|jd< t|jdd d S )N)r2   r   r4  r   r   rr  rs  )r   rR   rS   uniformru   locr   rK   r   r   r   r   test_kde_missing_vals  s    z(TestDataFramePlots.test_kde_missing_valsc                    sV  ddl m  ttjdd}|d }t|jj}dd |j	D }| j
||d t|jjdddd	}| j|dd
d | j|dd |jjdd}| j|ddd t  |jjdddd} fdd| D }t|d  d t  |jjddd} fdd| D }t|d  d t  |jjdddd}| j|dddd d S )Nr   	Rectangler2   r   c                 S   s   g | ]}t |qS r   r   r^  r   r   r   r     s     z3TestDataFramePlots.test_hist_df.<locals>.<listcomp>rt  T)r   r   r   r   r   r   r   r_  r`  ra  )
cumulativebinsdensityc                    s   g | ]}t | r|qS r   r   r   r'   r|  r   r   r     s     
 r   r   )r~  r  c                    s   g | ]}t | r|qS r   r  r  r|  r   r   r     s     
 r   g      Y@rj  rB   
horizontal)rT  rU  orientationrl  )Zmatplotlib.patchesr}  r   rR   rS   r   r   rK   r|   rD   ru  rL   r   rM   rI   r   Zget_childrenassert_almost_equalr   )rd   re   rf  rH   r  rc   Zrectsr   r|  r   test_hist_df  s6    zTestDataFramePlots.test_hist_dfweights皙?r2   )shape)r2   r    c                 C   sz   t jd tttddgt jdd}t|jd|d}t|jdd}d	d
 |j	D }dd
 |j	D }t
|| d S )Nr   ro   rp   r    r2   r|   )r   r  rs  c                 S   s   g | ]}|  qS r   r  r   patchr   r   r   r     s     z8TestDataFramePlots.test_hist_weights.<locals>.<listcomp>c                 S   s   g | ]}d |   qS )r  r  r  r   r   r   r     s     )rR   rS   seedr   rp  r\   r   r   rK   r   rI   r  )rd   r  re   r   r   Zpatch_height_with_weightsZexpected_patch_heightr   r   r   test_hist_weights  s     z$TestDataFramePlots.test_hist_weightsNc           
      C   s   t dd |D }t dd |D }t dd |D }t dd |D }	|d k	rhtj||dd |d k	rtj||dd |d k	rtj||dd |d k	rtj|	|dd d S )Nc                 S   s   g | ]}|  qS r   r   r   r   r   r   r     s     z7TestDataFramePlots._check_box_coord.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   r  r   r   r   r   r      s     c                 S   s   g | ]}|  qS r   r  r   r   r   r   r     s     c                 S   s   g | ]}|  qS r   )r   r   r   r   r   r     s     F)Zcheck_dtype)rR   rt   rI   r   )
rd   r   
expected_y
expected_h
expected_x
expected_wZresult_yZresult_heightZresult_xZresult_widthr   r   r   _check_box_coord  s    z#TestDataFramePlots._check_box_coordc                 C   s  t ttdddddgtdddd	d
gttdddddgtdddddgttdddddgtd
d	dddgddddgd}t tttjdddddgtddddd	d
gttdtjddddgtddddddgttdddtjddgtd
d	ddddgddddgd}||fD ]h}|jjdd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddddgtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjddd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddd	d
gtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjdddd}| j|d jtdddddgtdddd	d
gd | j|d jtdddddgtdddddgd | j|d jtdddddgtd
d	dddgd |jjddd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddddgtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjdddd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddd	d
gtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjddddd}| j|d jtdddddgtdddd	d
gd | j|d jtdddddgtdddddgd | j|d jtdddddgtd
d	dddgd q>d S ) Nr   r    r%   r   r/   r+   	   rB   r>   r=   r  ro   rp   rq   r   )r  r   )r  r  T)r  r         r   rQ     )r  r   r   r  )r  r  )r  r  )r  r   r  )r  r   r   r  )	r   rR   repeatrt   ru   rK   r|   r  r   )rd   Z	normal_dfZnan_dfre   rH   rc   r   r   r   test_hist_df_coord  s    ***	      z%TestDataFramePlots.test_hist_df_coordc                 C   s(   t tjdd }t|jdd d S )Nr2   r   TrO  )r   rR   rS   r   cumsumr   rK   r   r   r   r   test_plot_int_columns  s    z(TestDataFramePlots.test_plot_int_columnsc                 C   s   dd l m} | }ttjdd}ddddddddddgddgfD ]X}|  |d	 |j	|d
}t
| d t| D ]\}}| || kstqqJd S )Nr   r2   r%   ^+o)r   r   r    r   r   o   )style)matplotlib.pyplotpyplotgcfr   rR   rS   r   Zclfadd_subplotrK   	enumerater   ra   Z
get_markerrb   )rd   r`   rg   re   markersrH   idxrQ   r   r   r   test_style_by_column  s    

 z'TestDataFramePlots.test_style_by_columnc                 C   sP   t ddg}| }| d ks$t|jdd}|  d  dksLtd S )Nr   r    TrO  r    )r   rK   
get_legendrb   	get_textsr%  )rd   r   rH   r   r   r   test_line_label_none  s
    z'TestDataFramePlots.test_line_label_nonezprops, expected)ZboxpropsZboxes)ZwhiskerpropsZwhiskers)ZcappropsZcaps)ZmedianpropsZmediansc                 C   sP   t dd dD }|ddii}|jjf ddi|}|| d  dksLtd S )	Nc                 S   s   i | ]}|t jd qS r  )rR   rS   )r   r   r   r   r   
<dictcomp>  s      zHTestDataFramePlots.test_specified_props_kwd_plot_box.<locals>.<dictcomp>ABCcolorZC1ro  rp  r   )r   rK   rd  Z	get_colorrb   )rd   propsr  re   Zkwdrh   r   r   r   !test_specified_props_kwd_plot_box  s    z4TestDataFramePlots.test_specified_props_kwd_plot_boxc                 C   s   t tdddgtdddtdddtdddgd	gd
}| }|jd  }|d |d k sdt|jd  }t	
|tdddg d S )Nr   r   r     r+   r   r  rB   testr   r   )r   rR   rt   r   rK   r   r   rb   r   rI   r   )rd   re   rH   r1   Zydatar   r   r   test_unordered_ts  s     z$TestDataFramePlots.test_unordered_tsc                 C   sj   t ddddgi}tjjD ]}|j|d t|j|  qdD ]&}|jdd|d t|j|dd q>d S )Nr'   r   r    r%   rs  )r~   r   )r   r   PlotAccessor_common_kindsrK   getattr)rd   re   r   r   r   r   test_kind_both_ways  s    z&TestDataFramePlots.test_kind_both_waysc              
   C   sH   t td}tjjD ].}d}tjt|d |j|d W 5 Q R X qd S )NZabcdno numeric data to plotr)   rs  )	r   rU   r   r  r  rN   rO   r  rK   rd   re   r   rf   r   r   r   test_all_invalid_plot_data  s
    z-TestDataFramePlots.test_all_invalid_plot_datac                 C   s   t dn ttjddtd}d|tj|jd dk< t	j
jD ].}d}tjt|d	 |j|d
 W 5 Q R X qDW 5 Q R X t d\ ttjddtd}d|tj|jd dk< tjtdd	 |jdd
 W 5 Q R X W 5 Q R X d S )Nr   r+   r    rj   r   r   r#  r  r)   rs  r   )rI   r   r   rR   rS   r   rv   rT   r  r   r  r  rN   rO   r  rK   r  r   r   r    test_partially_invalid_plot_data  s    "z3TestDataFramePlots.test_partially_invalid_plot_datac              	   C   s@   t tjdd}d}tjt|d |jdd W 5 Q R X d S )Nr+   r    z*invalid_plot_kind is not a valid plot kindr)   Zinvalid_plot_kindrs  )r   rR   rS   r   rN   rO   r   rK   r   r   r   r   test_invalid_kind  s    z$TestDataFramePlots.test_invalid_kindzx,y,lblrp   rq   ro   r   r   r   c              	   C   sJ   t ddgddgddgd}tjtdd	 |j|||d
 W 5 Q R X d S )Nr   r    r%   r   r/   r=   r  x must be a label or positionr)   r'   r(   r   r   rN   rO   r   rK   )rd   r'   r(   lblre   r   r   r   test_invalid_xy_args  s    	z'TestDataFramePlots.test_invalid_xy_argsc              	   C   sR   t ddgddgddgd}d}tjt|d	 |jd
ddgdd W 5 Q R X d S )Nr   r    r%   r   r/   r=   r  z.label should be list-like and same length as yr)   ro   rp   rq   Z	bad_labelr  r  r   r   r   r   test_bad_label  s    z!TestDataFramePlots.test_bad_labelzx,yr   c              	   C   sL   t dddgdddggtdd}tjtd	d
 |j||d W 5 Q R X d S )Nr   r%   r/   r    r   r=   ZAABr   r  r)   r&   )r   rU   rN   rO   r   rK   r/  r   r   r   test_invalid_xy_args_dup_cols  s     z0TestDataFramePlots.test_invalid_xy_args_dup_colszx,y,lbl,colorsr7  Zbluer   r   r    ZbokehZcythongreenZyellowc                 C   sl   t ddgddgddgd}t|jd||d	 |j||||d
}t|jt|ksVt| j| |d d S )Nr   r    r%   r   r/   r=   r  ro   r  )r'   r(   r   r  Z
linecolors)r   r   rK   ra   r   rb   r<  r   )rd   r'   r(   r  rE  re   rH   r   r   r   test_y_listlike  s
    
z"TestDataFramePlots.test_y_listlikezx,y,colnamesc                 C   s0   t ddgddgd}||_t|j||d d S )Nr   r    r%   r   r   r&   )r   rD   r   rK   )rd   r'   r(   Zcolnamesre   r   r   r   test_xy_args_integer   s    z'TestDataFramePlots.test_xy_args_integerc                 C   s   t tjjddtjjddtdtjjdd d}|jjdddd}t|jdks\t	|jjddd	d
}t|d j
jdkst	| j|ddd d S )Nr  rw  r  ro   rp   r+   )r'   r(   Zgridsizer   T)r'   r(   r   r   r    rF   r   )r   rR   rS   ry  r   rK   r   ra   r+  rb   figurerc   rL   )rd   re   rH   rc   r   r   r   test_hexbin_basic'  s    z$TestDataFramePlots.test_hexbin_basicc                 C   s   t tjjddtjjddtdtjjdd d}|jjdddd}t|jdks\t	|jjdddtj
d	}t|jdkst	d S )
Nr  rw  r  ro   rp   rq   )r'   r(   rq   r   )r'   r(   rq   Zreduce_C_function)r   rR   rS   ry  r   rK   r   ra   r+  rb   Zstdr   r   r   r   test_hexbin_with_c<  s    z%TestDataFramePlots.test_hexbin_with_czkwargs, expectedZBuGnr6  r5  r9  ZYlGnc                 C   sj   t tjjddtjjddtdtjjdd d}|jjf ddd|}|jd jj	|ksft
d S )Nr  rw  r  ro   rp   r&   r   )r   rR   rS   ry  r   rK   r   r+  r9  r   rb   )rd   kwargsr  re   rH   r   r   r   test_hexbin_cmapK  s    	z#TestDataFramePlots.test_hexbin_cmapc              	   C   sp  t tjdddddgdddd	d
gd}d}tjt|d |j  W 5 Q R X t	|jjdd}| 
|j|j t	|jjdd}| 
|j|j t	|jjddd}t|t|jkst|D ]}| 
|j|j qt||jD ]\}}| |kstqdddddg}dddddg}t	|jjdd||d}t|t|jksBt|D ]$}| 
|j| | j|j|d qFd S )Nr/   r%   XYZr   r   r   r   erC   z/pie requires either y column or 'subplots=True'r)   r{   r    Tr   ro   rp   rq   rr   rs   r   gm)r   r   rh  rE  r8  )r   rR   rS   rT   rN   rO   r   rK   r}   r   r   textsr-   ra   rD   rb   r\   r;  r<  r   )rd   re   rf   rH   rc   ylabelrh  Z
color_argsr   r   r   test_pie_df^  sF    zTestDataFramePlots.test_pie_dfc              	   C   s  dd l }ttjdd}tdD ]}tj|j||f< q"| jj	dd\}}i }|j
dkr`ddi}td   |jjf d|dd| W 5 Q R X dd	d
dg}t|D ]r\}}t|}	d|	|< dd |jD }
|
|	kstdd |  D }|d | ||d d   }||kstqd S )Nr   r   )Zncolsz3.3	normalizeT)r   rH   rP  0123r  c                 S   s   g | ]}|  qS r   r$  r  r   r   r   r     s     z6TestDataFramePlots.test_pie_df_nan.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   r$  r  r   r   r   r     s     r   )rD  r   rR   rS   rT   r]   ru   Zilocr`   r   __version__rI   assert_produces_warningrK   r}   r  rU   r  rb   r  r  )rd   rF  re   r&  rg   rc   r  Zbase_expectedrH   r  rh   Zresult_labelsexpected_labelsr   r   r   test_pie_df_nan  s&    
$z"TestDataFramePlots.test_pie_df_nanc              	   C   s  t dt dddd}t|}t dd t dd d}t|}t|j|dd}| j|dd	d
 t|j|ddd}| j|dd	d
 t|j|dd}| j|dd	d
 t|d j||ddd}| j|d	d	d
 t|d jt dd d}| j|ddd
 t|jt dd d}| j|dd	d
 dD ]`}| }t dd ||< t|j|d}| j|dd	d
 t|jdd|d}| j|ddd
 q*t	t
 |jt jdd W 5 Q R X tdgd dgd d}t	t |j|d W 5 Q R X d S )Nr  r   r   r&   皙?皙?T)yerrr   r    xerrr  )r  r   r   )r  r   r   rA   )r  r  r   r   r(   r  )r    r  )r  u   誤差r'   )r(   r'   r  r[  Zzzz)rR   r   r   onesr   rK   _check_has_errorbarscopyrI   Zexternal_error_raisedr   rS   r   r  )rd   r   re   d_errdf_errrH   r  Zs_dfr   r   r   test_errorbar_plot  sD        z%TestDataFramePlots.test_errorbar_plotrA   r   c                 C   s$  t dt dddd}t|}t dd t dd d}t|}t|j|d |d}| j|dd	d
 t|j||d}| j|dd	d
 t|j|||d}| j|d	d	d
 t|j|d |d |d}| j|d	d	d
 t|jdd|d}| j|d	d	d
 t|jd||d|d}| j|ddd
 d S )Nr  r   r   r&   r  r  r'   r  r   r    r  )r  r  r   )r  r  r   T)r   r  r  r   r   r   )rR   r   r   r  r   rK   r  )rd   r   r   re   r  r  rH   rc   r   r   r   "test_errorbar_plot_different_kinds  s.    z5TestDataFramePlots.test_errorbar_plot_different_kindszIterator is consumed)r   rO   c              	   C   sd   t  R tdtdddd}t|}t|jtdt	|d}| j
|ddd W 5 Q R X d S )	Nr  r   r   r&   r  r  r    r  )warningscatch_warningsrR   r   r   r   rK   	itertoolsr  ra   r  )rd   r   re   rH   r   r   r   test_errorbar_plot_iterator  s
    
z.TestDataFramePlots.test_errorbar_plot_iteratorc                 C   sr   t ttjdd}t ttjdd}t|j|d}| j|ddd t|jddd}| j|ddd d S )Nr+   r    r  r   r  r   )r(   r  )r   rR   absrS   r   r   rK   r  )rd   re   r  rH   r   r   r   'test_errorbar_with_integer_column_names   s    z:TestDataFramePlots.test_errorbar_with_integer_column_namesc           
      C   s.  t ttjdd}t ttjddddgd}ddg}|D ]$}t|j||d}| j|ddd	 qDtd
ddd}|j	|dd |j	|dd t|j|dd}| j|ddd	 t
dt
dddd}t |}tdd tdd d}t |}||fD ]$}	t|j|	d}| j|ddd	 qd S )Nr+   r%   r    r   r   rQ   rA   r  r  1/1/2000M)r  r  T)Zinplacer  r   r&   r  r  )r'   r   r  r   )r   rR   r  rS   r   r   rK   r  r
   r   r   r  )
rd   re   r  kindsr   rH   ixr   r  errr   r   r   "test_errorbar_with_partial_columns	  s$     z5TestDataFramePlots.test_errorbar_with_partial_columnsc           	      C   s.  t dt dddd}t dd t dd d}tddd	d
}t||d}t||d}t|j||d}| j|ddd t|j||d}| j|ddd t|jd|d |d}| j|ddd t|jdd|d}| j|ddd t|j||d}| j|ddd t|jd||dd}| j|ddd d S )Nr  r   r   r&   r  r  r  z1/1/2001r  )r  r,   r  r    r  r(   r'   )r(   r  r   r   T)r   r   r  r   )rR   r   r  r
   r   r   rK   r  )	rd   r   r   r  r  r   Ztdf_errrH   rc   r   r   r   test_errorbar_timeseries   s.    z+TestDataFramePlots.test_errorbar_timeseriesc              	   C   s   t jd t jddd}tt dddj}|j||d d}|j	d 
 d jd d df }|dd d df t ddg }t|| td	}tjt|d
 |j|jd W 5 Q R X t  d S )Nr   r%   r    r/   rQ  )r  r  r   r   zCAsymmetrical error bars should be provided with the shape (3, 2, 5)r)   r  )rR   rS   r  rT   r   r   ZreshapeTrK   r+  	get_pathsZverticesrt   rI   r  r  r  rN   rO   r   r   )rd   r  re   rH   Zyerr_0_0Zexpected_0_0rf   r   r   r   test_errorbar_asymmetricalB  s      z-TestDataFramePlots.test_errorbar_asymmetricalc              	   C   s   t tjddttjd d d}t|jdd t|j|d t	
d @ | }t|jdksftt||j t|jdkstW 5 Q R X d S )Nr+   r%   r,   T)tabler   r   )r   rR   rS   rT   rU   rV   rW   r   rK   rI   r  ra   Ztablesrb   r   r  r  r   r   r   r   
test_tableW  s    $zTestDataFramePlots.test_tablec                    s  t ttjddtdddgd}t ttjddd tdddgd}t|jjddd j	 ddd t|jjdd|d	 j	 d
dd t|jjdd|d j	 dd
d t|jjdd||d j	 d
d
d d fdd	}t ttjdddddddgd}|jjdddddd j	 d
d
d | j
ddd | j
ddd |jjddddd j	 dd
d | j
ddd d S )Nr/   r    r'   r(   r   r&   r   r  )r'   r(   r  r   )r'   r(   r  )r'   r(   r  r  has_xerrc                    sx   g } fddj D d }|D ]"}t|r8|| q || q fdd|D }j|t|gt| d d S )Nc                    s   g | ]}t | d r|jqS )F)r  r   r^  has_errr   r   r   w  s      z[TestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_color.<locals>.<listcomp>r   c                    s   g | ]}| j kr|qS r   )r+  r  rH   r   r   r   }  s     
 r  )
containersr   extendappendr<  rR   rt   ra   )r  r  r  r   ZerrselZ	err_linesrH   rd   r  r   _check_errorbar_coloru  s     zGTestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_colorr+   r   r   r   r   r  r   r7  )r'   r(   r  r  r   r  Zhas_yerrr  )r'   r(   r  r  )r  )r   rR   r  rS   r   r]   r   rK   r~   r  r  )rd   re   r  r
  r   r	  r   test_errorbar_scatterc  s<         z(TestDataFramePlots.test_errorbar_scatterc              	   C   sH   t dddgdd}tjttfdd |jdd	d
dd W 5 Q R X d S )Nr   r    r%   r   r   z'unknown' is not ar)   r   r   unknownr~   )r'   r(   r6  r   )r   rN   rO   r   KeyErrorrK   r   r   r   r   test_scatter_unknown_colormap  s    z0TestDataFramePlots.test_scatter_unknown_colormapc              
      s  dd l m} |d t \}}tddddddgddddddgddddddgddddddgd	} fd
d}|D ]}|jddd|dd qr||  || t  t \}}t	t
 |jd|dd}W 5 Q R X || t  t \}}|D ]}|jddd|d q||  |D ]T}t|jdks:t j| dd  j| dd  j|jdddd q"t  d S )Nr   r-  r   r    r%   r   r/   r=   r   r   r   r   c                    s   | D ](}t |jdkst j| dd q| d | d fD ],} j| dd  j|jdddd q>| d | d fD ],} j| dd  j|jdddd q|d S )	Nr   Tr6   r   r    Fr7   r%   )ra   r   rb   rX   rm  rZ   rc   rH   rd   r   r   _check  s    z5TestDataFramePlots.test_sharex_and_ax.<locals>._checkr   r   r4   T)r'   r(   r4   rH   sharex)r   rH   r  r'   r(   r4   rH   r6   r7   )r  r  r   _generate_4_axes_via_gridspecr   rK   tight_layoutr  rI   r  UserWarningra   r   rb   rX   rm  rZ   rd   r`   gsrc   re   r  rH   r   r  r   test_sharex_and_ax  s>    

	

z%TestDataFramePlots.test_sharex_and_axc              
      s  dd l m} t \}}tddddddgddddddgddddddgddddddgd} fd	d
}|D ]}|jddd|dd qh||  || t  t \}}t	t
 |jd|dd}W 5 Q R X ||  || t  t \}}|D ]}|jddd|d q||  |D ]T}t|jdks>t j| dd  j| dd  j|jdddd q&d S )Nr   r   r    r%   r   r/   r=   r  c                    s   | D ]>}t |jdkst j| dd  j|jdddd q| d | d fD ]} j| dd qT| d | d fD ]} j| dd q|d S )	Nr   Tr6   r7   r   r    r%   F)ra   r   rb   rX   rZ   rm  r  r  r   r   r    s    z5TestDataFramePlots.test_sharey_and_ax.<locals>._checkr   r   r4   T)r'   r(   r4   rH   r   )r   rH   r   r  r6   r7   )r  r  r  r   rK   r  r  rI   r   r  r  ra   r   rb   rX   rm  rZ   r  r   r  r   test_sharey_and_ax  s<    
	


z%TestDataFramePlots.test_sharey_and_axc           	   
   C   s   ddl }ddl}i }tjjD ]}i }|dkrpttjjddtjjddt	dtjjdd d}ddd	}n|d
krt
  }nt
 }||jf d|i|||< qt
  |  d}|D ](}tjt|d || j W 5 Q R X qdS )z3Check that every plot type gets properly collected.r   N)r   r~   r}   r  rw  r  ro   rp   r&   r   r   z)weakly-referenced object no longer existsr)   )gcweakrefr   r  Z
_all_kindsr   rR   rS   ry  r   rI   rJ   r  proxyrK   r   ZcollectrN   rO   ReferenceErrorr   )	rd   r  r  resultsr   argsre   rf   keyr   r   r   test_memory_leak   s.     z#TestDataFramePlots.test_memory_leakc           
   	      sB  dd l m  dd lm ttjdtdddd}t	tjdd|j
tdd} fd	d
} fdd}| | fD ]\}}|j|d}t|jdkst|j|d}t|jdkst||fD ]>}| j| dd | j| dd | j|jdddd qt  qz| | fD ]\}}|jd||gd}t|jdksJtt|jdks^t|D ]@}| j| dd | j| dd | j|jdddd qbt  q| \}}tt |jd||gddd}W 5 Q R X t|d jdkstt|d jdkst||fD ]}| j| dd q| j|d  dd | j|d jdddd | j|d  dd | j|d jdddd t  | \}}tt |jd||gddd}W 5 Q R X t|d jdkstt|d jdkst| j|d  dd | j|d  dd ||fD ].}| j| dd | j|jdddd q:t   fdd}	|	 }t	tjdd|j
tdd}|jd|d}|D ]T}t|jdkst| j| dd | j| dd | j|jdddd qt  |	 }tt |jd|ddd}W 5 Q R X |D ]}t|jdksFtqF|d |d fD ]}| j| dd qr|d |d fD ]}| j| dd q|d |d fD ].}| j| dd | j|jdddd q|d |d fD ].}| j| dd | j|jdddd qt  d S )Nr   r+   r  )r  r,   r    ABr   c                     sL     dd}  }|| d dd d f }|| dd d f }||fS )Nr%   r   r    GridSpecr  r  r  rg   r   r   gridspecr`   r   r   _get_vertical_grid0  s
    zHTestDataFramePlots.test_df_gridspec_patterns.<locals>._get_vertical_gridc                     sL     dd}  }|| d d d df }|| d d df }||fS )Nr   r%   r    r%  r'  r(  r   r   _get_horizontal_grid7  s
    zJTestDataFramePlots.test_df_gridspec_patterns.<locals>._get_horizontal_gridr  r   Tr6   r7   rG   )r   rH   r  r   Fc                     st     dd}  }|| d dd df }|| d ddf }|| dd df }|| d }||||fS )Nr%   r    r!   r%  )r  rg   r   r   Zax3Zax4r(  r   r   _get_boxed_gridt  s    zETestDataFramePlots.test_df_gridspec_patterns.<locals>._get_boxed_gridr   ABCDr%   )matplotlib.gridspecr)  r  r  r   rR   rS   r   r
   r   r-   rU   rK   ra   r   rb   rX   rm  rZ   rI   r   r  r  )
rd   tsre   r*  r+  r   r   rH   rc   r,  r   r(  r   test_df_gridspec_patterns'  s    

 
 	z,TestDataFramePlots.test_df_gridspec_patternsc                 C   s4   | j tdddgdddgdtjjdddd	 d S )
Nr   r    r%   r   r   r   r   r&   )kws)Z_check_grid_settingsr   r   r  Z_dataframe_kindsr  r   r   r   test_df_grid_settings  s
    z(TestDataFramePlots.test_df_grid_settingsc           	      C   s@  | j  \}}|ddddg ttjdj|d ttj	dtj	dd}| j 
 }|d}|jd|dd	dd
d | j  \}}ddlm} ||}|jdddd}ttjdj|d ttjdj|d | j  \}}ddlm} ||dddd}ttjdj|d ttjdj|d d S )Nr  r+   r  rB   r   )r   r   r   r   r~   r   r   Zhsv)r   rH   r'   r(   r   r9  r   )make_axes_locatabler@  z5%g?)r4  pad)
inset_axesz30%r   r%   )r   r]  rz  )r`   r   Zadd_axesr   rR   rS   rT   rK   r   r   r  Zmpl_toolkits.axes_grid1r3  Zappend_axesZ%mpl_toolkits.axes_grid1.inset_locatorr5  )	rd   rg   rH   re   r3  dividerZcaxr5  Ziaxr   r   r   test_plain_axes  s$    

z"TestDataFramePlots.test_plain_axesmethodc                 C   sp   t tjddtddjdd djdd d	}d
}ddg}||dd}t|j|f |}| j|j	|d d S )NrQ  r    r$  r   c                 S   s
   | j  S r'  )rp   r  re   r   r   r   r     r   zBTestDataFramePlots.test_secondary_axis_font_size.<locals>.<lambda>rq   c                 S   s
   | j d S )Ng?r:  r9  r   r   r   r     r   )rr   r  rq   rr   T)r   rU  Z
mark_right)rc   rX  )
r   rR   rS   r   rU   Zassignr  rK   rM   r   )rd   r8  re   rU  r   r  rH   r   r   r   test_secondary_axis_font_size  s    z0TestDataFramePlots.test_secondary_axis_font_sizec                 C   s   t dddgdddgdddgd	}|jjd
d}|dd dd | D }tt|| }|d dkspt|d dkst|d dkstd S )Nr%   r    r  r      ZMondayZTuesdayZ	Wednesday)ZsalesZvisitsdayr=  r   r   c                 S   s   g | ]}|  qS r   r$  r   tr   r   r   r     s     zATestDataFramePlots.test_x_string_values_ticks.<locals>.<listcomp>r   r   r   )	r   rK   r   set_xlimrZ   rp  r\   
get_xticksrb   )rd   re   rH   xticklabelslabels_positionr   r   r   test_x_string_values_ticks  s    z-TestDataFramePlots.test_x_string_values_ticksc                 C   s   t ddgddgg}ttjddddg|d}| }|d	d d
d | D }t	t
|| }|d dkszt|d dkst|d dkst|d dkstd S )Nr  i  r   r    r   ro   rp   rC   r   c                 S   s   g | ]}|  qS r   r$  r>  r   r   r   r     s     zETestDataFramePlots.test_x_multiindex_values_ticks.<locals>.<listcomp>z	(2012, 1)r   z	(2012, 2)r   z	(2013, 1)r   z	(2013, 2)r   )r   Zfrom_productr   rR   rS   r   rK   r@  rZ   rp  r\   rA  rb   )rd   r-   re   rH   rB  rC  r   r   r   test_x_multiindex_values_ticks  s    z1TestDataFramePlots.test_x_multiindex_values_ticksc                 C   sL   t ddgddgd}|j|d}| }|d dk s8t|d dksHtd S )Nr    r   r   r,   rs  r   )r   rK   r   rb   )rd   r   re   rH   xlimsr   r   r   test_xlim_plot_line  s
    z&TestDataFramePlots.test_xlim_plot_linec                 C   s   | j  \}}ddddg}tddddgdd	dd
gddddgddddgd|d}|dddg jj|dd |dg j|dd | }|d dk st|d dkstdd | D }||kstd S )NZk1Zk2Zk3Zk4i  r   i  i  ix  i  i@  i  r   r%   r   )s1s2s3r   r,   rH  rI  rJ  F)rH   r   r   T)rH   r   r   c                 S   s   g | ]}|  qS r   r$  r>  r   r   r   r     s     zWTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_type.<locals>.<listcomp>)r`   r   r   rK   rA   r   rb   rZ   )rd   rg   rH   Zindexesre   rF  rB  r   r   r   0test_xlim_plot_line_correctly_in_mixed_plot_type  s"    



	zCTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_typec                 C   sl   t dgtd}|jst| }t| dks4t| d }t| dksTtt| dkshtd S )NZfoo)rD   rk   r   r   )	r   intemptyrb   rK   ra   r   r   r   )rd   re   rH   rQ   r   r   r   test_plot_no_rows  s    
z$TestDataFramePlots.test_plot_no_rowsc              	   C   s4   t dddg}tjtdd |  W 5 Q R X d S )Nr   r   r   r  r)   )r   rN   rO   r  rK   r   r   r   r   test_plot_no_numeric_data!  s    z,TestDataFramePlots.test_plot_no_numeric_data)rQ   rA   r   r|   rr  r  r   r}   c                 C   s   t dt dd t dd t dt dd}t|}|jddg|d}t|dks`tdd	gd
dgdgf}t||D ]<\}}|dkr| j||d |dkr~t|jt|ks~tq~d S )Nr+   r   )r   r   r   r   r  )r   r  )r   r   r   r   r%   r   r  r   r   r   r}   rt  rQ   )	rR   r   r   rK   ra   rb   r\   ru  r   )rd   r   r   re   rc   r  rH   rh  r   r   r   test_group_subplot&  s    z%TestDataFramePlots.test_group_subplotc              	   C   s<   t td}d}tjt|d |jdgd W 5 Q R X d S )Nr   z!An iterable subplots for a Seriesr)   r   rE   )r   r]   rN   rO   NotImplementedErrorrK   )rd   Zserrf   r   r   r   (test_group_subplot_series_notimplemented>  s    z;TestDataFramePlots.test_group_subplot_series_notimplementedc              	   C   sL   t tdtddgd}d}tjt|d |jdgd W 5 Q R X d S )Nr    r  )r   r    r   z6An iterable subplots for a DataFrame with a MultiIndexr)   rE   )	r   rR   eyer   r^   rN   rO   rS  rK   r   r   r   r   ,test_group_subplot_multiindex_notimplementedD  s    z?TestDataFramePlots.test_group_subplot_multiindex_notimplementedc              	   C   sF   t tdddgd}d}tjt|d |jdgd W 5 Q R X d S )Nr    r   r   z4An iterable subplots for a DataFrame with non-uniquer)   rR  rE   )r   rR   rU  rN   rO   rS  rK   r   r   r   r   0test_group_subplot_nonunique_cols_notimplementedJ  s    zCTestDataFramePlots.test_group_subplot_nonunique_cols_notimplementedzsubplots, expected_msg){   z(subplots should be a bool or an iterable)r   !each entry should be a list/tuple))r   rY  )rR  rY  c              	   C   sH   t dt dd}t|}tjt|d |j|d W 5 Q R X d S )Nr+   r   r)   rE   rR   r   r   rN   rO   r   rK   )rd   r   Zexpected_msgr   re   r   r   r   test_group_subplot_bad_inputP  s    z/TestDataFramePlots.test_group_subplot_bad_inputc              	   C   sJ   t dt dd}t|}tjtdd |jdgd W 5 Q R X d S )Nr+   r   z Column label\(s\) \['bad_name'\]r)   )r   Zbad_namerE   rZ  rd   r   re   r   r   r   &test_group_subplot_invalid_column_namec  s    z9TestDataFramePlots.test_group_subplot_invalid_column_namec              	   C   sT   t dt dt dd}t|}tjtdd |jddgd W 5 Q R X d S )Nr+   )r   r   r   zshould be in only one subplotr)   r   )r   r   rE   rZ  r\  r   r   r   $test_group_subplot_duplicated_columnj  s    z7TestDataFramePlots.test_group_subplot_duplicated_column)rd  r~   r   c              	   C   sL   t dt dd}t|}tjtdd |jdg|d W 5 Q R X d S )Nr+   r   z1When subplots is an iterable, kind must be one ofr)   rP  rZ  )rd   r   r   re   r   r   r   test_group_subplot_invalid_kindq  s     z2TestDataFramePlots.test_group_subplot_invalid_kindz index_name, old_label, new_label)Nr  new)oldra  r`  )Nr  r  )Nr  r   r  c                 C   s   t ddgddggddgd}||j_|j|d}| |ks@t| dksPt|j|||d	}| t|kstt| t|kstd S )
Nr   r    r/   Type AType Br   rs  r  )r   r  xlabel)r   r-   r   rK   
get_xlabelrb   r;  str)rd   r   Z
index_nameZ	old_labelZ	new_labelre   rH   r   r   r   (test_xlabel_ylabel_dataframe_single_plotz  s    z;TestDataFramePlots.test_xlabel_ylabel_dataframe_single_plotzxlabel, ylabel)NN)X LabelN)NY Label)rh  ri  r~   r   c                 C   st   d}d}t ddgddgg||gd}|j|||||d}| |d krJ|n|ksTt| |d krf|n|ksptd S )Nrb  rc  r   r    r/   r   )r   r'   r(   rd  r  )r   rK   re  rb   r;  )rd   r   rd  r  ZxcolZycolre   rH   r   r   r   'test_xlabel_ylabel_dataframe_plane_plot  s    z:TestDataFramePlots.test_xlabel_ylabel_dataframe_plane_plotr   )FTc                 C   sj   t dgj|dddgd}|jjD ]B}|j r"| dks@t| dksPt|	 d dks"tq"d S )Nr   r  )r   r2   r   )r   r  r3   r0   )
r   rK   r  rc   r   Zget_visibler;  rb   r   Z
get_yticks)rd   r   Zax_dfrH   r   r   r   test_secondary_y  s    
   
z#TestDataFramePlots.test_secondary_yc              	   C   s   t ddgddgd}tt |jjddd W 5 Q R X tt |jjd	d W 5 Q R X td	 |jd W 5 Q R X d S )
Nr   r    r%   r   r   r   Tr.   F)r   rI   r  FutureWarningrK   rd  r   r   r   r   test_sort_columns_deprecated  s    z/TestDataFramePlots.test_sort_columns_deprecated)NNNN)q__name__
__module____qualname__rN   markZxfailr   Zslowri   rz   r   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r.  r0  r>  rB  rG  rK  r\  ri  rn  rq  tdZskip_if_no_scipyrv  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  r  r  r   r  r  r  r  r  r   r  r  r  r  r#  r0  r2  r7  r;  rD  rE  rG  rK  rN  rO  rQ  rT  rV  rW  r[  r]  r^  r_  rg  rj  rk  rm  r   r   r   r   r   *   s  g
 

&
/'%		
6	
 

' 
   
 	





	$



*
.
		

!,65
&s

	
 	

	
r   c                  C   sr   dd l } dd l}dd lm} | jdd}||d }||d }||d }||d }|||||gfS )Nr   r    rx  )r   r   r  rF   )rD  r.  r  r  r)  r&  Zsubplot)rF  rD  r`   r  Zax_tlZax_llZax_trZax_lrr   r   r   r    s    r  )(__doc__r   r   r  r  rV   r  ZnumpyrR   rN   Zpandas.util._test_decoratorsutilZ_test_decoratorsrr  Zpandas.core.dtypes.apir   Zpandasrw   r   r   r   r   r	   r
   Zpandas._testingZ_testingrI   Zpandas.tests.plotting.commonr   r   Zpandas.io.formats.printingr   Zpandas.plottingr   r:  r   ImportErrorZskip_if_no_mplr   r  r   r   r   r   <module>   sN                     *