1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Seaborn绘图-绘制散点图 折线图-分类统计图

Seaborn绘图-绘制散点图 折线图-分类统计图

时间:2021-07-31 04:32:22

相关推荐

Seaborn绘图-绘制散点图 折线图-分类统计图

Seaborn绘图

关系型绘图

seaborn.relplot()

这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图,具体绘制什么图形是通过kind参数来决定的。实际上以下两个函数就是relplot的特例:

• 散点类型:scatterplot -> relplot(kind=“scatter”)

• 线性类型:lineplot -> relplot(kind=“line”)

基本使用

import seaborn as snstips = sns.load_dataset("tips",cache=True)sns.relplot(x="total_bill",y="tip",data=tips)

hue参数

hue参数是用来控制第三个变量的颜色显示的。比如我们在以上图的基础之上体现出星期几的参数,那么可以通过以下代码来实现:

sns.relplot(x="total_bill",y="tip",hue="day",data=tips)

添加col和row参数

col和row,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础之上我们想要把Lunch(午餐)和Dinner(晚餐)分割成两个图来显示,那么可以通过以下代码来实现:

sns.relplot(x="total_bill",y="tip",hue="day",col="time",data=tips)

relplot绘制散点图

from matplotlib import pyplot as pltimport pandas as pdimport numpy as npimport seaborn as snstips = pd.read_csv("./seaborn-data-master/tips.csv")tips.head()# 知道 total_bill与tips之间的关系sns.relplot(x="total_bill",y="tip",data=tips)# 周几外出吃饭人比较多?# 通过点的颜色 来表示 日期# hue:分组后不同值显示不同颜色sns.relplot(x="total_bill",y="tip",data=tips,hue="day")tips.groupby(by="day").count()# 通过子图直接对比 中餐与晚餐 的人数 个数# col:从列的方向添加子图表示分类sns.relplot(x="total_bill",y="tip",data=tips,col="time")# 晚餐 女性, 晚餐 男性, 午餐 女性, 午餐 男性sns.relplot(x="total_bill",y="tip",data=tips,col="time",row="sex")# col_wrap:当图形展示多个时,控制指定多少列进行换行。注意:不能与row同时使用。# size:指定的列进行分组,然后通过数据的大小来表示点的大小。sns.relplot(x="total_bill",y="tip",data=tips,col="day",col_wrap=3,size="size")plt.show()sns.scatterplot(x="total_bill",y="tip",data=tips)

绘制折线图(线形图)

relplot通过设置kind="line"可以绘制折线图。并且他的功能比plt.plot更加强大。plot只能指定具体的x和y轴的数据(比如x轴是N个数,y轴也必须为N个数)。而relplot则可以在自动在两组数据中进行计算绘图。示例代码如下:

fmri = sns.load_dataset("fmri")sns.relplot(x="timepoint",y="signal",kind="line",data=fmri)

relplot绘制线型图

fmri = pd.read_csv("./seaborn-data-master/fmri.csv")fmri.head()# 阴影部分表示置信区间# 体现 signal与timepoint的变化关系sns.relplot(x="timepoint",y="signal",data=fmri,kind="line")# 指定ci=None 取消置信区间的显示sns.relplot(x="timepoint",y="signal",data=fmri,kind="line",ci=None)sns.relplot(x="timepoint",y="signal",data=fmri,kind="line",hue="region")sns.relplot(x="timepoint",y="signal",data=fmri,kind="line",hue="region",col="event")# 注意:lineplot与relplot区别:无kind参数,无col,row参数# sns.lineplot(x="timepoint",y="signal",data=fmri)sns.lineplot(x="timepoint",y="signal",data=fmri,hue="region",col="event")df = pd.DataFrame({"x":np.arange(10),"y":np.cos(np.arange(10))})# cos折线图sns.relplot(x="x",y="y",data=df,kind="line")

分类绘图

分类图的绘制,采用的是sns.catplot来实现的。cat是category的简写。这个方法默认绘制的是分类散点图,如果想要绘制其他类型的图,同样也是通过kind参数来指定。

主要分为

• 分类散点图

• 分类分布图

• 分类统计图

分类散点图

分类散点图比较适合数据量不是很多的情况,他是用catplot来实现,但是也有以下两个特别的方法。

• stripplot():catplot(kind=“strip”) 默认的

• swarmplot():catplot(kind=“swarm”)

sns.catplot(x="day",y="total_bill",data=tips,hue="sex")

sns.catplot(x="day",y="total_bill",data=tips,hue="sex",kind="swarm")

catplot分类散点图

# 不同日期 的 总金额 数量 sns.catplot(x="day",y="total_bill",data=tips)sns.catplot(x="day",y="total_bill",data=tips,hue="sex")sns.stripplot(x="day",y="total_bill",data=tips,hue="sex")"""数据量比较大,不适用"""sns.catplot(x="day",y="total_bill",data=tips,hue="sex",kind="swarm")sns.swarmplot(x="day",y="total_bill",data=tips,hue="sex")

分类分布图

分类分布图,主要是根据分类来看,然后在每个分类下数据的分布情况。也是通过catplot来实现,以下三个方法分别是不同的kind参数:

• 箱型图:boxplot() (with kind=“box”)

• 小提琴图:violinplot() (with kind=“violin”)

箱型图

小提琴图

小提琴实际上就是两个对称的核密度曲线合并起来,然后中间是一个箱线图(也可以为其他图)组成的。通过小提琴图可以看出数据的分布情况。示例代码如下:

sns.violinplot(x="day",y="total_bill",data=tips,inner="quartile",hue="sex",split=True)

catplot绘制分类分布图

athletes = pd.read_csv("athlete_events.csv")athletes.info()athletes.head()countries = {'CHN':'中国','JPN':"日本",'KOR':'韩国','USA':"美国",'CAN':"加拿大",'BRA':"巴西",'GBR':"英国",'FRA':"法国",'ITA':"意大利",'ETH':"埃塞俄比亚",'KEN':"肯尼亚",'NIG':"尼日利亚",}"""1.选择在countries国家的数据- 判断国家在countries.keys()列表中,就选择出来"""my_athletes = athletes[athletes["NOC"].isin(list(countries.keys()))]my_athletes.info()sns.boxplot(x="NOC",y="Height",data=my_athletes)plt.show()"""小提琴图- 默认两边对称 kde曲线 核密度估计曲线 """# 日期 与 小费# sns.violinplot(x="day",y="total_bill",data=tips)sns.violinplot(x="day",y="total_bill",data=tips,hue="sex",inner="quartile",split=True)

分类统计图

分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。有以下几种方式:

• 条形图:barplot() (with kind=“bar”)

• 柱状图:countplot() (with kind=“count”)

• 点线图:pointplot() (with kind=“point”)

条形图

seaborn中的条形图具有统计功能,可以统计出比例,平均数,也可以按照你想要的统计函数来统计。示例代码如下:

sns.catplot(x="day",y="total_bill",data=tips,kind="bar")

柱状图

柱状图是专门用来统计某个单一变量出现数量的图形。示例代码如下:

sns.catplot(x="sex",data=titanic,kind="count")

点线图

点线图可以非常方便的看到变量之间的趋势变化。示例代码如下:

sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")

分类统计图

# 黑色线:置信区间,越长数据就越离散sns.catplot(x="day",y="total_bill",data=tips,kind="bar")sns.catplot(x="day",y="total_bill",data=tips,kind="bar",estimator=sum)titanic = pd.read_csv("./seaborn-data-master/titanic.csv")titanic.head()# 获救男女的情况# sum指定的频数sns.catplot(x="sex",y="survived",data=titanic,kind="bar",estimator=sum)"""kind为count时,只能有x或者y,如果同时指定x与y就会报错因为柱状图时统计的个数- x是柱状图- y是横条形图"""sns.catplot(y="survived",data=titanic,kind="count")# 舱位与营救男女的关系sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")

分布绘图

分布绘图主要分为单变量分布以及二变量分布和pairplot

单变量分布

单一变量主要就是通过直方图来绘制。在seaborn中直方图的绘制采用的是distplot,其中dist是distribution的简写,不是histogram的简写。示例代码如下:

titanic = pd.read_csv("./seaborn-data-master/titanic.csv")titanic.head()sns.distplot(titanic["age"])

二变量分布

多变量分布图可以看出两个变量之间的分布关系。一般都是采用多个图进行表示。多变量分布图采用的函数是jointplot。

tips = sns.load_dataset("tips")g = sns.jointplot(x="total_bill", y="tip", data=tips)

• 通过设置kind='reg’可以设置回归绘图和核密度曲线

• 通过设置kind='hex’可以绘制六边形图

jointplot其它常用参数

x,y,data:绘制图的数据。kind:scatter、reg、resid、kde、hex。color:绘制元素的颜色。height:图的大小,图会是一个正方形。ratio:主图和副图的比例,只能为一个整形。space:主图和副图的间距。dropna:是否需要删除x或者y值中出现了NAN的值。marginal_kws:副图的一些属性,比如设置bins、rug等。

pairplot

sns.pairplot(tips,vars=["total_bill","tip"])

默认情况下,对角线的图(x和y轴的列相同)是直方图,其他地方的图是散点图,如果想要修改这两种图,可以通过diag_kind和kind来实现。其中这两个参数可取的值为:

diag_kind:auto, hist, kde。kind:scatter, reg。

分布绘图

"""kde=False 不显示kde线bins=30 指定组数rug=True 越密集则数据越集中hist=False 不展示直方图"""# titanic.info() # 说明age列是有缺失值# 取出非nan的数据age_ti = titanic[~np.isnan(titanic["age"])]# age_ti.info()# 所有人的年龄分布情况sns.distplot(age_ti["age"],kde=False,bins=30,rug=True) # 在绘制直方图的时候,最好去除nan的值# 二变量分布:两个变量的关系sns.jointplot(x="total_bill",y="tip",data=tips)# kind参数 指定为 reg 的时候,会展示出回归线以及kde曲线sns.jointplot(x="total_bill",y="tip",data=tips,kind="reg")# 六边形图 用颜色表示集中情况china_ath = athletes[athletes["NOC"]=="CHN"]sns.jointplot(x="Height",y="Weight",data=china_ath,kind="hex",gridsize=20,color="r",height=20,marginal_kws={"kde":True})# iris iris = pd.read_csv("./seaborn-data-master/iris.csv")iris.head()sns.pairplot(iris,vars=["sepal_length","sepal_width","petal_length","petal_width"],kind="reg",diag_kind="kde")

线性回归绘图

线性回归图可以帮助我们看到数据的关系趋势。在seaborn中可以通过regplot和lmplot两个函数来实现。regplot的x和y可以为Numpy数组、Series等变量。而lmplot的x和y则必须为字符串,并且data的值不能为空:

1. regplot(x,y,data=None)。

2. lmplot(x,y,data)。

sns.lmplot(x="total_bill",y="tip",data=tips)

tips = pd.read_csv("./seaborn-data-master/tips.csv")tips.info()tips.head()# sns.regplot(x="total_bill",y="tip",data=tips) # 字符串指定列,指定数据来源sns.regplot(x=tips["total_bill"],y=tips["tip"]) # 数据标签获取到的列sns.lmplot(x="total_bill",y="tip",data=tips) # 字符串,可以# sns.lmplot(x=tips["total_bill"],y=tips["tip"]) # 不支持数据标签获取列的这种形式 报错

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。