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

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

常见的jointplot画法

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

当我们使用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()

结果是这样

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

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

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

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

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

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

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

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

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

 然后是三个分布的

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

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

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,)
)

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)
)

 对于三分布

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)
)

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)
)

 

 对于三分布,我们这样写,本质上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')

 好啦,我滴任务完成了!

等等,标题没加(doge)

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

  • 29
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值