seaborn中jointplot的2D KDE自定义画法:商用数据可视化

先来点图(doge)的先后对比,我们将一点点的地达到这个效果

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第1张图片seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第2张图片

常见的jointplot画法

本文以iris数据集为例进行说明,数据集长这样

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第3张图片

当我们使用seaborn 0.11.2绘制两个特征(萼片和花瓣的长度)的联合KDE图(等高线图)时,如果采用基本方法,x,y就是俩方向轴(从iris_data的列里面挑),data数据源,kind是kde(kernel density estimate),核密度估计简介

import pandas as pd
pd.plotting.register_matplotlib_converters()
import matplotlib.pyplot as plt
import seaborn as sns

iris_filepath = "visual/iris.csv"
iris_data = pd.read_csv(iris_filepath, index_col="Id")

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data, 
              kind="kde",
)
plt.show()

结果是这样

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第4张图片

如果我们要把三种鸢尾花分开,可以改一行代码

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data, 
              kind="kde",
              hue='Species'
)

可见,三种鸢尾花的分布被分开了

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第5张图片

也许对于普通的需求而言,这样已经足够,但对于商用可视化而言是不够的,比如等高线没有层次感,色彩单调等问题。

下面是我boss的要求:中间的图要等高线变化对应色彩的变化,两边的图曲线下方加阴影,加上标题(doge),另外还问我能不能改改颜色...

对于这合理(qi guai)的要求,我们来改代码

1.中间图的等高线变化对应着色彩的变化

我们给它加上阴影,对于单分布的代码改一哈

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data, 
              kind="kde",
              shade = True,
)

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第6张图片

 然后是三个分布的

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data, 
              hue='Species',
              kind="kde",
              shade = True,
)

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第7张图片

 这边重叠的有点丑,别急,我们改点透明度

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data, 
              hue='Species',
              kind="kde",
              shade = True,
              joint_kws=dict(alpha =0.6)
)

其中,joint_kws是中间那个图的属性,要啥都可以往里面扔,它只要接受包含属性一个字典就行了,所以代码改成这样结果也是一样的啦

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data, 
              hue='Species',
              kind="kde",
              joint_kws=dict(alpha =0.6,shade = True,)
)

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第8张图片

2.边上两个图加阴影

对于这种无理要求,有的pandas版本是自带这玩意儿的,但如果是我这种比较倒霉的人,就没有(因为pandas版本),所以我们继续改代码(唉声叹气)

对于单分布,marginal_kws和joint_kws道理一样,但marginal_kws是管上边和右边那个图的

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data,              
              kind="kde",
              joint_kws=dict(shade = True,),
              marginal_kws=dict(shade=True)
)

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第9张图片

 对于三分布

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data,              
              kind="kde",
              hue='Species',
              joint_kws=dict(alpha =0.6,shade = True,),
              marginal_kws=dict(shade=True)
)

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第10张图片

3.改颜色

我们使用调色盘(Palette)改颜色,为了演示,我随便找了一个,注意:单分布和多分布调色盘

调色盘初始化方法不同

对于单分布,中间图的变化可以用cmap改

pal = sns.color_palette("CMRmap",as_cmap=True)

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data,              
              kind="kde",
              cmap=pal,
              joint_kws=dict(alpha =0.6,shade = True),
              marginal_kws=dict(shade=True)
)

 seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第11张图片

 对于三分布,我们这样写,本质上pal和pal2都是含颜色的列表,由于是三分布,我们就在palette=的那行,取列表的前三个元素

pal2 = sns.color_palette("CMRmap")

sns.jointplot(x='Petal Length (cm)', y='Sepal Width (cm)',data= iris_data, 
              kind="kde",
              joint_kws=dict(shade = True,alpha=0.5),
              marginal_kws=dict(shade=True,color='g'),
              palette=pal2[0:3],
              hue='Species')

seaborn中jointplot的2D KDE自定义画法:商用数据可视化_第12张图片

 好啦,我滴任务完成了!

等等,标题没加(doge)

plt.title('看了那么多,喜欢就点个赞吧')

你可能感兴趣的:(seaborn,pandas,商业可视化,pandas,可视化,python)