文章目录
- seaborn
- 1 seaborn简介
- 1.1 主要特征:
- 1.2 seaborn主要内容
- 2 seaborn基本设置
- 2.1 图表大小:context
- 2.2 设置风格
- 2.3 设置字体与支持中文
- 2.4 设置临时风格
- 2.5 设置调色板
- 2.6 set方法
- 3 调色板
- 3.1 分类色板(qualitative)
- 3.2 连续调色板
- 3.3 离散色板
- 4 seaborn内置数据集
- 4.1 数据集
- 5 seaborn常用的图表
- 5.1 分类图表
- 5.2 分布图
- 5.3 关系图
- 5.3.1 散点图
- 5.3.2 线性回归图
- 5.4 其他常用图表
- 5.4.1 catplot
- 5.4.2 relplot
- 5.4.3 FacetGrid
- 5.4.4 PairGrid
- 5.4.5 JointGrid
- 5.4.6 joinplot
seaborn
1 seaborn简介
seaborn :带着定制主题和高级界面控制的Matplotlib扩展包,兼容Numpy与Pandas数据结构;
官网地址:http://seaborn.pydata.org/index.html (http://seaborn.pydata.org/index.html)
1.1 主要特征:
- 基于matplotlib绘图风格,增加了绘图模式
- 增加调色板功能,色彩更加丰富
- 绘图接口功能强大,能够处理更加复杂图形绘制
- 用数据子集绘制与比较单变量和双变量分布的功能
- 用聚类算法可视化矩阵数据
- 灵活运用处理时间序列数据
- 利用网格建立复杂图像集
一句话概括:seaborn能够使用最简单的代码,将数据进行更好的展示;
1.2 seaborn主要内容
- 图表风格,颜色,线条等基本设置
- seaborn常用的数据集
- seaborn常用图表详解
2 seaborn基本设置
import seaborn as sns
sns.__version__
'0.13.0'
import matplotlib.pyplot as plt
#导入seaborn
import seaborn as sns
import numpy as np
import pandas as pd
%matplotlib inline
#使用lineplot绘制直线
sns.lineplot(x=[1,2,3],y=[1,2,3])
<AxesSubplot: >
2.1 图表大小:context
sns.set_context(context=None, font_scale=1, rc=None)
- context值:paper, notebook, talk, poster
- font_scale:字体缩放
- 设置之后在jupyter中一直生效
x = [1,2,3]
y = [1,2,3]
sns.set_context('notebook', font_scale=1)
sns.lineplot(x=x,y=y)
<AxesSubplot: >
2.2 设置风格
sns.set_style(style=None, rc=None)
- style:darkgrid, whitegrid, dark, white, ticks
- rc:字典格式,设置seaborn其他样式,例如:字体,子大小等
x = [1,2,3]
y = [1,2,3]
#改变风格
sns.set_style('darkgrid')
sns.lineplot(x=x,y=y)
<AxesSubplot: >
# 获取当前风格
sns.axes_style()
{'axes.facecolor': '#EAEAF2',
'axes.edgecolor': 'white',
'axes.grid': True,
'axes.axisbelow': True,
'axes.labelcolor': '.15',
'figure.facecolor': 'white',
'grid.color': 'white',
'grid.linestyle': '-',
'text.color': '.15',
'xtick.color': '.15',
'ytick.color': '.15',
'xtick.direction': 'out',
'ytick.direction': 'out',
'lines.solid_capstyle': <CapStyle.round: 'round'>,
'patch.edgecolor': 'w',
'patch.force_edgecolor': True,
'image.cmap': 'rocket',
'font.family': ['sans-serif'],
'font.sans-serif': ['Arial',
'DejaVu Sans',
'Liberation Sans',
'Bitstream Vera Sans',
'sans-serif'],
'xtick.bottom': False,
'xtick.top': False,
'ytick.left': False,
'ytick.right': False,
'axes.spines.left': True,
'axes.spines.bottom': True,
'axes.spines.right': True,
'axes.spines.top': True}
2.3 设置字体与支持中文
sns.pointplot(x=[1,2,3],y=[4,5,6])
plt.xlabel('表格')
sns.set_style({"font.sans-serif":['simhei','Droid Sans Fallback']})
#sns.despine()
2.4 设置临时风格
sns.axes_style(style=None, rc=None)
def myplot():
sns.lineplot(x=[1,2,3],y=[1,2,3])
#设置临时风格
with sns.axes_style("whitegrid"):
plt.subplot(211)
myplot()
plt.subplot(212)
myplot()
2.5 设置调色板
sns.set_palette(palette, n_colors=None, desat=None, color_codes=False)
- palette:‘deep’, ‘muted’, ‘pastel’, ‘bright’, ‘dark’, 'colorblind’或者hls, husl
- n_colors:颜色数量
- 作用:调色板,使用plot方法绘制时,颜色使用深度不一样
# 设置调色板
import numpy as np
sns.set_palette('dark')
x = y = np.array([1,2,3])
sns.lineplot(x=x,y=y)
sns.lineplot(x=x,y=y+1)
<AxesSubplot: >
# 设置hls, n_colors颜色种类
sns.set_palette('hls', n_colors=3)
lines = np.arange(0,40).reshape(20,2)
for line in lines:
plt.plot(line)
2.6 set方法
sns.set(context='notebook',style='darkgrid',palette='deep',font='sans-serif',font_scale=1,color_codes=True,rc=None,)
上面方法的集合体
#设置默认值
sns.set()
x = y = np.array([1,2,3])
sns.lineplot(x=x,y=y)
sns.lineplot(x=x,y=y+1)
<AxesSubplot: >
3 调色板
颜色类别:
- 分类:彼此间差异较大
- 连续:颜色按照顺序渐变
- 离散:中间颜色浅,两端颜色深
主要方法:
- 获取颜色:sns.color_palette(palette=None, n_colors=None, desat=None)
- 显示颜色:sns.palplot(pal, size=1)
3.1 分类色板(qualitative)
-
默认主题
默认6中颜色:deep, muted, pastel, bright, dark, colorblind;
当palette设置为以上几种颜色,n_colors设置值超过deep颜色种类是,使用重复颜色;
# 产生颜色
cls = sns.color_palette(palette='deep')
# 使用palplot绘制颜色
sns.palplot(cls)
# 颜色实质:RGB组成的元祖
cls
-
hls色圈系统
在一个色圈空间内使用均匀分布的颜色;
主要方法:
- 通用方法:cls = sns.color_palette(palette=‘hls’,)/cls = sns.color_palette(palette=‘husl’,)
- 设置hls饱和度等:sns.hls_palette(n_colors=6, h=0.01, l=0.6, s=0.65)
cls = sns.color_palette(palette='hls', n_colors=20)
sns.palplot(cls)
cls = sns.color_palette(palette='husl', n_colors=20)
sns.palplot(cls)
cls =sns.hls_palette(n_colors=20, h=0.2, l=0.6, s=0.65)
sns.palplot(cls)
- 使用xkcd颜色来命名颜色
- xkcd:色板,名称,RGB值
- xkcd链接:https://xkcd.com/color/rgb/ (https://xkcd.com/color/rgb/)
- 获取名称对应的RGB值:字典sns.xkcd_rgb
- 通过xkcd获取颜色:sns.xkcd_palette(colors)
sns.palplot(sns.xkcd_palette(["purple", "violet", "greyish", "aqua", "green"]))
3.2 连续调色板
-
Color Brewer
color_palette(pallette=' ')
中可以填充特定Color Brewer值,设定颜色。主要值有:
Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r,
Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r,
PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu,
PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r,
RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r,
Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r,
YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary,
binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm,
coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r,
gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r,
gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r,
gray, gray_r, hot, hot_r, hsv, hsv_r, icefire, icefire_r, inferno, inferno_r,jet, jet_r, magma, magma_r,
mako, mako_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r,
prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, seismic, seismic_r, spring, spring_r,
summer, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r,
twilight, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r使用Color Brewer颜色
- 末尾加r可翻转色板
- 末尾加d可变暗
# 产生颜色,通过设置n_colors产生一系列不重复的颜色
cls = sns.color_palette(palette='Blues', n_colors=50)
sns.palplot(cls)
# 末尾加r可翻转色板
cls = sns.color_palette(palette='Blues_r', n_colors=50)
sns.palplot(cls)
# 末尾加d可变暗
cls = sns.color_palette(palette='Blues_d', n_colors=50)
sns.palplot(cls)
-
cubehelix_palette调色板
sns.cubehelix_palette(n_colors=6,start=0,rot=0.4,gamma=1.0,hue=0.8,light=0.85,dark=0.15,reverse=False,as_cmap=False)
sns.palplot(sns.cubehelix_palette(10, start=.3, rot=-.5))
-
单一调色板
sns.light_palette(color,n_colors=6,reverse=False,as_cmap=False,input='rgb',)
sns.dark_palette(color,n_colors=6,reverse=False,as_cmap=False,input='rgb',)
sns.palplot(sns.light_palette('green',n_colors=20))
3.3 离散色板
Color Brewer色板
diverging_palette:sns.diverging_palette(h_neg,h_pos,s=75,l=50,sep=10,n=6,center='light',as_cmap=False)
主要参数:
- s与l:明暗
- n:控制数量
- sep:中间色的宽度
- center控制中间色
sns.palplot(sns.color_palette("BrBG", 10))
sns.palplot(sns.diverging_palette(200, 290, s=70, l=30, n=10, sep=20, center="dark"))
4 seaborn内置数据集
- 获取数据集名称列表:sns.get_dataset_names()
- 导入数据集:sns.load_dataset(name, cache=True, data_home=None, **kws)
4.1 数据集
seaborn中内置数据集是非常好的,做分析入门的数据集,常用的数据集;
数据集名称 | 描述 |
---|---|
flights | 1949年到1960年期间,每个月的航班乘客的数量 |
geyser | 间歇泉喷发的间隔时间 |
iris | 鸢尾花 |
tips | 小费 |
titanic | 泰坦尼克获救数据 |
- 获取数据集列表
sns.get_dataset_names()
['anagrams',
'anscombe',
'attention',
'brain_networks',
'car_crashes',
'diamonds',
'dots',
'dowjones',
'exercise',
'flights',
'fmri',
'geyser',
'glue',
'healthexp',
'iris',
'mpg',
'penguins',
'planets',
'seaice',
'taxis',
'tips',
'titanic']
- 导入数据集
# 导入数据集
pdata = sns.load_dataset('tips')
pdata
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
... | ... | ... | ... | ... | ... | ... | ... |
239 | 29.03 | 5.92 | Male | No | Sat | Dinner | 3 |
240 | 27.18 | 2.00 | Female | Yes | Sat | Dinner | 2 |
241 | 22.67 | 2.00 | Male | Yes | Sat | Dinner | 2 |
242 | 17.82 | 1.75 | Male | No | Sat | Dinner | 2 |
243 | 18.78 | 3.00 | Female | No | Thur | Dinner | 2 |
244 rows × 7 columns
5 seaborn常用的图表
- seabron支持图表格式比较丰富
- 文档描述:https://seaborn.apachecn.org/ (https://seaborn.apachecn.org/)
seaborn图表相关方法使用方式与参数类似 常用图表类型如下
5.1 分类图表
-
barplot方法
sns.barplot(x=None,y=None,hue=None,data=None,order=None,hue_order=None,estimator=<function meanat 0x000001C71D259288>,ci=95,...)
主要参数:
参数 说明 x, y
x轴数据或者 data 中的列名 hue
data 中的列名,用于分类 data
数据 order
绘制类别变量的顺序 hue_order
绘制 hue 变量的顺序 estimator
统计量方法,默认为 mean
ci
估计值周围的置信区间大小 n_boot
计算置信区间需要迭代的次数 orient
绘图的方向, v
表示垂直,h
表示水平color
元素的颜色 palette
不同级别 hue 变量的颜色 ax
指定 axes
# 不同时间点消费均值:根据time进行分组,并计算total_bill的均值,使用sns可视化
pdata.groupby('time', observed=False)['total_bill'].mean().plot.bar()
<AxesSubplot: xlabel='time'>
# 使用sns.barplot方法
sns.barplot(x='time', y='total_bill', data=pdata)
<AxesSubplot: xlabel='time', ylabel='total_bill'>
# 不同时间点,不同性别消费均值:使用barplot中的hue参数
sns.barplot(x='time', y='total_bill', data=pdata, hue = 'sex')
<AxesSubplot: xlabel='time', ylabel='total_bill'>
#设置颜色
sns.barplot(x='time', y='total_bill', data=pdata, hue = 'sex', palette='seismic')
<AxesSubplot: xlabel='time', ylabel='total_bill'>
- 箱状图
- 展现与类别相关的数据分布状况
- 使用四分位数表示数据分布情况,可以标识异常数据
- 箱状图方法:
sns.boxplot(x=None, y=None,hue=None,data=None)
- 主要参数:
参数 说明 fliersize
表示异常值观察的标记的大小 whis
超过高低四分位数时 IQR 的比例
# 箱状图:不同日期消费区别
pdata = sns.load_dataset('tips')
sns.set(style='darkgrid',palette='hls' )
sns.boxplot(x='day', y='total_bill', data=pdata, orient='v')
<AxesSubplot: xlabel='day', ylabel='total_bill'>
# 不同性别消费情况
sns.boxplot(x='sex', y='total_bill', data=pdata, orient='v')
<AxesSubplot: xlabel='sex', ylabel='total_bill'>
# 不同性别,不同饭点消费情况
sns.boxplot(x='sex', y='total_bill',hue='time', data=pdata, orient='v')
<AxesSubplot: xlabel='sex', ylabel='total_bill'>
# 指定不同whis,控制异常区间(默认大于上四分位数1.5或者小于下四分位数的1.5)
sns.boxplot(x='sex', y='total_bill',hue='time', data=pdata, orient='v',whis=1.5)
<AxesSubplot: xlabel='sex', ylabel='total_bill'>
-
分类散点图
主要方法:
- 点可以重复:
sns.swarmplot(x=None,y=None,hue=None,data=None,...)
- 点不能重复:
sns.stripplot(x=None,y=None,hue=None,data=None,...)
- 点可以重复:
# 分类散点图
sns.set_palette(sns.color_palette('husl'))
plt.figure(figsize=(16, 4))
ax1 = plt.subplot(1,2,1)
sns.swarmplot(x='sex', y='total_bill',hue='time', data=pdata, ax=ax1, dodge=True)
ax2 = plt.subplot(1,2,2)
sns.stripplot(x='sex', y='total_bill',hue='time', data=pdata, ax=ax2,dodge=True)
<AxesSubplot: xlabel='sex', ylabel='total_bill'>
箱状图与分类散点图结合,获取数据分布更加详细信息
sns.set_palette(sns.color_palette('husl'))
sns.swarmplot(x='sex', y='total_bill',hue='time', data=pdata,dodge=True)
sns.set_palette('dark')
sns.boxplot(x='sex', y='total_bill',hue='time', data=pdata)
<AxesSubplot: xlabel='sex', ylabel='total_bill'>
-
数量统计
数量统计:
sns.countplot(x=None,y=None,hue=None,data=None,...)
#不同性别数量
_ = sns.countplot(x='sex', data=pdata)
#不同性别,不同饭点数量
_ = sns.countplot(x='sex', hue='time', data=pdata)
5.2 分布图
- 直方图
sns.distplot(a,bins=None,hist=True,kde=True, rug=False,fit=None,...)
(该方法已被弃用)sns.histplot(data,x=None,y=None,hue=None,kde=None,...)
# 使用直方图查看用户消费额度分布
sns.histplot(pdata['total_bill'], color='g', kde=True)
<AxesSubplot: xlabel='total_bill', ylabel='Count'>
# 设置不同颜色
sns.distplot(pdata['total_bill'],color='g',rug=True, rug_kws={'color':'r'}, kde_kws={'color':'b'})
UserWarning:
`distplot` is a deprecated function and will be removed in seaborn v0.14.0.
Please adapt your code to use either `displot` (a figure-level function with
similar flexibility) or `histplot` (an axes-level function for histograms).
For a guide to updating your code to use the new functions, please see
https://gist.github.com/mwaskom/de44147ed2974457ad6372750bbe5751
sns.distplot(pdata['total_bill'],color='g',rug=True, rug_kws={'color':'r'}, kde_kws={'color':'b'})
<AxesSubplot: xlabel='total_bill', ylabel='Density'>
# 设置bins
sns.histplot(pdata['total_bill'],bins=10, color='g', kde=True)
<AxesSubplot: xlabel='total_bill', ylabel='Count'>
-
KDE图
- 拟合并绘制单变量或双变量核密度估计图
sns.kdeplot(data,data2=None,shade=False,vertical=False,kernel='gau',...)
- 主要参数:
方法 说明 data
,data2
一维数据 shade
是否显示阴影 vertical
方向, True
表示垂直,False
表示水平kernel
核函数,可选值包括 ‘gau’, ‘cos’, ‘biw’, ‘epa’, ‘tri’, ‘triw’ bw
KDE 的带宽(bandwidth),可选值包括 ‘scott’, ‘silverman’, scalar, pair of scalars
sns.kdeplot(pdata.total_bill, color='r')
<AxesSubplot: xlabel='total_bill', ylabel='Density'>
# 双变量核密度:消费与小费
sns.kdeplot(data=pdata, x="total_bill", y="tip", cmap='Accent')
<AxesSubplot: xlabel='total_bill', ylabel='tip'>
5.3 关系图
需求:得到一组数据后,查看数据关系:线性关系,类别关系或者其他关系,如何处理?
5.3.1 散点图
sns.scatterplot(x=None,y=None,hue=None,style=None,size=None,data=None,palette=None)
#导入数据:
iris = sns.load_dataset('iris')
#花萼长宽
sns.scatterplot(x='sepal_length', y = 'sepal_width', hue='species', data=iris)
<AxesSubplot: xlabel='sepal_length', ylabel='sepal_width'>
#花瓣长宽
sns.scatterplot(x='petal_length', y = 'petal_width', hue='species', data=iris)
<AxesSubplot: xlabel='petal_length', ylabel='petal_width'>
5.3.2 线性回归图
- 拟合数据集回归模型的绘图方法
- lmplot:sns.lmplot(x,y,data,hue=None,col=None,row=None,…)
import statsmodels
sns.lmplot(x='petal_length', y = 'petal_width', hue='species', data=iris,truncate=False)
<seaborn.axisgrid.FacetGrid at 0x1c6eeac02d0>
5.4 其他常用图表
5.4.1 catplot
- 将分类图绘制到 FacetGrid 上图级别接口
- 在不同的图表中对数据进行展示,支持多种展示方式
seaborn.catplot(x=None, y=None, hue=None, data=None, row=None, col=None, col_wrap=None,...)
- 返回:FacetGrid
import seaborn as sns
# 使用Seaborn自带的示例数据集"tips"
g = sns.catplot(x="sex", y="total_bill", hue="smoker", data=sns.load_dataset("tips"), kind="box")
#定col:
sns.catplot(x="sex", y="total_bill", hue="smoker",data=sns.load_dataset("tips"), kind="box", col = 'time')
<seaborn.axisgrid.FacetGrid at 0x1c6eaa6dad0>
#定row:
sns.catplot(x="sex", y="total_bill", hue="smoker",data=sns.load_dataset("tips"), kind="box", row = 'time')
<seaborn.axisgrid.FacetGrid at 0x1c6efdd1c50>
#指定row与col
sns.catplot(x="sex", y="total_bill", data=sns.load_dataset("tips"), kind="box", row = 'time', col='day')
<seaborn.axisgrid.FacetGrid at 0x1c6ebc59390>
5.4.2 relplot
功能与catplot类似,用与显示两个变量的关系
sns.relplot(x="total_bill", y="tip", data=sns.load_dataset("tips"), kind="line",col='day')
<seaborn.axisgrid.FacetGrid at 0x1c6f09a1710>
5.4.3 FacetGrid
- 根据设置条件生成多个图表,效果与catplot,relplot类似
g = sns.FacetGrid(data, row=None, col=None, hue=None, col_wrap=None,...)
g.map(func, *args, **kwargs)
:绘制图表制图表
tips=sns.load_dataset("tips")
g = sns.FacetGrid(tips, row='sex', col='day')
g.map(plt.hist, 'total_bill')
<seaborn.axisgrid.FacetGrid at 0x1c6f168ac50>
5.4.4 PairGrid
- 数据集中成对关系的子图
- 将数据集中每个变量映射到多个子图中,两两交叉
g = sns.PairGrid(data,hue=None,hue_order=None,palette=None,hue_kws=None,vars=None,...)
g.map_diag(func, **kwargs)
:绘制对角线图表g.map_offdiag(func, **kwargs)
:绘制非对角线图表线图表
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g = g.map(plt.scatter)
#设置对角线与其他方式
g = sns.PairGrid(iris, hue="species")
g = g.map_diag(plt.hist)
g = g.map_offdiag(plt.scatter)
g = g.add_legend()
5.4.5 JointGrid
- 绘制双变量与边际单变量图表
g = sns.JointGrid(x, y, data=None, height=6, ratio=5, space=0.2, dropna=True, xlim=None, ylim=None,size=None)
g.plot(joint_func, marginal_func, annot_func=None)
#绘制联合图表与边缘图表g.plot_joint(func, **kwargs)
#绘制联合图表g.plot_marginals(func, **kwargs)
#绘制边缘图表绘制边缘图表
g = sns.JointGrid(x="total_bill", y="tip", data=tips)
#绘制回归图与直方图
g.plot(sns.regplot, sns.histplot)
<seaborn.axisgrid.JointGrid at 0x201dcd910d0>
5.4.6 joinplot
- 绘制变量的双变量及单变量图
g = sns.jointplot(x, y, data=None,kind='scatter',stat_func=None,color=None,...)
tips = sns.load_dataset("tips")
g = sns.jointplot(x="total_bill", y="tip", data=tips)
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg")
sns.jointplot(x="total_bill", y="tip", data=tips, kind="hex")
<seaborn.axisgrid.JointGrid at 0x1c6efd7a6d0>
iris = sns.load_dataset("iris")
g = sns.jointplot(x="sepal_width", y="petal_length", data=iris,kind="kde", space=0, color="g")
g = sns.jointplot(x="sepal_length", y="sepal_width", data=iris, color="k")
g.plot_joint(sns.kdeplot, zorder=0, n_levels=6)
<seaborn.axisgrid.JointGrid at 0x1c6efd79f50>