3
���h. � @ s\ d dl Z d dlZd dlZddlmZ ddd�Zdd� Zd d
� Z dd� Z
ddd�Zdd� ZdS )� N� )�
basestring�default_colormap.csvc C s4 ddl m} tjt| �}tj|dd�j}|jd|�S )z#
Returns viridis color map
r )�LinearSegmentedColormapN)�header�viridis) �matplotlib.colorsr �
pkg_resources�resource_stream�__name__�pdZread_csv�values� from_list)�fnamer �fZcm_data� r �1/tmp/pip-build-5_djhm0z/xray/xarray/plot/utils.py�_load_default_cmap s r c C sB | j � |k }| j� |k}|r&|r&d}n|r0d}n|r:d}nd}|S )N�both�min�max�neither)r r )� calc_data�vmin�vmaxZ
extend_minZ
extend_max�extendr r r �_determine_extend s r c
C sv ddl }|sd}|dkrd}n|dkr,d}nd}t|�| d }t| |�}|jj|||d �\}} t| d
| �|_|| fS )zB
Build a discrete colormap and normalization of the data.
r Nr r r r r � )r �name)r r )�
matplotlib�len�_color_palette�colorsZfrom_levels_and_colors�getattrr )
�cmap�levelsr �filled�mplZext_n�n_colors�palZnew_cmap�cnormr r r �_build_discrete_cmap$ s
r+ c C s dd l j}ddlm} tjdd|�}t| ttf�rzyddl m
} || |d�}W q� tk
rv || |d�} | |�}Y q�X n�t| t�r�yddl m
} || |d�}W q� tt
fk
r� y|j| �} W n" t
k
r� || g|d�} Y nX | |�}Y q�X n| |�}|S )Nr )�ListedColormapg �?)�
color_palette)r( )�N)Zmatplotlib.pyplotZpyplotr r, �npZlinspace�
isinstance�list�tupleZseaborn.apionlyr- �ImportErrorr �
ValueErrorZget_cmap)r$ r( Zpltr, Zcolors_ir- r) r r r r! @ s,
r! FTc
C s� d}
ddl }tj| tj| � �}|dk }
d}|dkr>d}d}|dk rR|dk rRd}
d}|dkrz|rptj||
�}q�|j� }n|
r�t|| �}|dkr�|r�tj|d|
�}q�|j� }n|
r�t|| �}|
r�|dk r�|dkp�| }nd}|�r|dk�rtt|| �t|| ��}| | }}||7 }||7 }|dk�rB|�r>d}nd}|dk�rRt � }|dk �r�t
|t��r�|jj
|�}|j||�}|d |d }}|dk�r�t|||�}|dk �r�t||||�\}} t|||||| d
�S )av
Use some heuristics to set good defaults for colorbar and range.
Adapted from Seaborn:
https://github.com/mwaskom/seaborn/blob/v0.6/seaborn/matrix.py#L158
Parameters
==========
plot_data: Numpy array
Doesn't handle xarray objects
Returns
=======
cmap_params : dict
Use depends on the type of the plotting function
g @r NFT�d ZRdBu_rr r )r r r$ r r% Znorm���)r r/ Zravelr ZisnullZ
percentiler �absr r r0 �int�tickerZMaxNLocatorZtick_valuesr r+ �dict)Z plot_datar r r$ �centerZrobustr r% r& |