python散点图最多能画几个点_python数据可视化(五)seaborn散点图(分布散点、分簇散点图)...

在上篇文章中(

python数据可视化(四)seaborn回归分析绘图(regplot)

)中,我们讨论了绘制两个变量之间关系的函数用法,但是大家有没有发现,上篇文章中,我们分析消费总额和小费、用餐人数和小费之间的关系时没有区分性别,也没有区分用餐时间,为什么呢?因为regplot()函数没有hue这个参数,如果要根据类别绘制,大家可以去官网查看lmplot()函数的用法,而本篇文章我们用几个函数实现带有分类属性图形的绘制。

seaborn.jointplot(x,y)

这个函数会用直方图(单变量)和散点图(带分类属性多变量)同时展示数据的分布,我们先绘制出图形,然后根据图形分析。

#导入依赖包

%matplotlib inline

import matplotlib.pyplot as plt

import seaborn as sns

sns.set(style="whitegrid", color_codes=True)

tips = sns.load_dataset("tips")

这里我们还是先看下数据集特征变量。如图:

8991edd583be4bd28621430e9556443d

数据预览

total_bill是消费总金额,tip是小费,size指用餐人数。现在我们用seaborn.jointplot()函数绘制出消费总金额和

小费

之间的关系。

sns.jointplot(x='total_bill',y='tip',data=tips)

5b6d62d81956479bbe6ada053eac0c3f

total_bill与tip的jointplot()

首先,我们分析这个函数绘出的图形组成,可以看到此图形由散点图和直方图两部分组成,散点图反应了消费总额和小费之间的数据分布,直方图反应了单个变量(如小费或者消费总金额)的数据分布。为了更好的验证,这里我们用seaborn提供的直方图函数和散点图函数单独绘制,并与jointplot做一个对比,首先我们绘制出total_bill和tip的直方图,如下:

sns.distplot(tips['total_bill'])

sns.distplot(tips['tip'])

1a78b2965b65471d9df364aa68617d23

total_bill直方图

46e0c27b340f40f58d07adce6e7f4b74

tip直方图

可以看到,total_bill直方图对应jointplot中上侧直方图,tip直方图对应jointplot中右侧直方图。验证了直方图,那我们再将total_bill和tip的散点图单独绘制出来,

sns.scatterplot(x='total_bill',y='tip',data=tips)

63274ec8df2c4dac96a4c05513dd86fd

total_bill与tip散点图

可以看到,total_bill与tip散点图和jointplot中的散点图分布一致,这也就间接的说明,jointplot()这个函数可以同时绘制出distplot和scatterplot这两个函数绘制的图形。相信通过上面的几个例子,大家都知道了jointplot()函数的功能就是joint了distplot和scatterplot,那么接下来,我们在看看这个函数的其他几个参数的用法。首先看看kind这个参数,这个参数能够指定绘制图形的类型,可选值有scatter 、 reg 、resid 、kde 、 hex,默认是scatter。那我们直接指定不同类型,看看绘图效果。

#回归类型

sns.jointplot(x='total_bill',y='tip',data=tips,kind='reg')

5573f61a576d4a3fa0b784090fe1bf1c

kind=reg

#右侧回归

sns.jointplot(x='total_bill',y='tip',data=tips,kind='resid')

39a4e2c686b54092be4e726e63114de0

kind=resid

sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex')

91359eeb1d9d43f2b2379f8d8c946131

kind=hex

seaborn.stripplot()

jointplot函数反应了两个变量之间的数据分布关系,但是没有反应出分类数据的分布,就像上图中我们只是看到了消费总金额和小费之间的关系,但是无法看出不同性别数据对应的消费金额和小费之间的关系,因此,seaborn提供了stripplot()函数来反应分类数据的散点图。这个函数没有必填参数,如果不传任何参数,只会绘制出一个图形模板。如下:

sns.stripplot()

d76a2dffd089457a96183b9fe1c36207

stripplot全部默认参数绘图效果

现在,我们给stripplot传消费金额和小费数据,看看效果:

sns.stripplot(x='total_bill',y='tip',data=tips)

f71f5c39459b4d30b68203ad3430a74d

以total_bill为分类数

从上面的图中可以看到,stripplot参数中的x是横轴数据(分类数据),y是纵轴数据(类型对应数据),由于我们将总金额作为分类,导致分类太多,横轴数据根本看不清,所以我们重新传参,分别看下性别和小费、时间和小费,用餐日期跟小费之间的数据分布。

sns.stripplot(x='sex',y='tip',data=tips)

8015712b00b9400ea91ce3160c896935

不同性别对应小费数据分布

sns.stripplot(x="day", y="tip", data=tips);

ec72f236d36b429492e240696105f812

不同日期对应小费数据分布

sns.stripplot(x="time", y="tip", data=tips);

9a28c124b74d43ff89737b12d1f0c1f7

用餐时间对应小费数据分布

sns.stripplot(x="smoker", y="tip", data=tips);

e2dfb55af9864e5db86f81fce93c50d5

吸烟者与不吸烟给的小费数据分布

从上面几个图中大致可以看出,最高小费出现在男性吸烟人群中,用餐人数最多的是在周六。通过观察上面几个图,大家可能发现数据分布是一个带状,而不是条状,按道理肯定有很多小相同的数据,表现在图上就是数据重叠,但上面几个图好像展示的很好,那是因为jitter(数据抖动)这个参数的默认值是True,如果我们将其设置为False,效果如图:

sns.stripplot(x="day", y="tip",jitter=False, data=tips);

cdab1be1290741079963404b45dcfe53

jitter=False

分布散点图函数有了jitter这个参数,好像已经足够好的展示了数据的分布(抖动后还是有相同数据),但事实上还有比这分布散点图更明晰的函数,那就是分簇散点图。

seaborn.swarmplot()

swarmplot函数的功能和stripplot功能类似,能够绘制分类数据散点图,但是这个散点图没有重叠。我们直接传入数据看效果:

sns.swarmplot(x="day", y="tip", data=tips)

6526bd8338374ecea1920cd9d3d812fb

分簇散点图

可以看到,这个图就像是一棵松树,相同的数据在一个枝丫上,很有层次感,看了很舒服,而且可以根据数的宽度判断相同数据的规模,比如小费金额为2刀的数据很多,树显得很宽,这也符合社会现实,大部分是中等收入的,所以出手也不会很阔绰。同时,“土豪”和“屌丝”占很小的比例。言归正传,在stripplot函数中,我们只看了某一类别对应的数据,而没有看类中对应其他类的数据分布,举个例子,比如我们用stripplot看到男性和女性对应的小费数据,但是不知道男性和女性对应的数据中哪些是吸烟的,哪些是不吸烟的,对于这个问题这两个函数都有一个hue参数,这里我们就以分簇散点图函数为例,演示下这个参数的效果,如图:

sns.swarmplot(x="day", y="tip", hue="sex",data=tips)

016fb3691cb74fbe8eb5442af305c1b9

hue=sex

上面这个图就很好的展示了不同性别在不同的星期中付小费数据的分布。由于swarmplot函数和stripplot函数很相似,这里就不做太多介绍,因为后面的小提琴图、箱线图中还会用到这个函数,今天的内容就到这里,感谢阅读和关注!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值