FacetGrid 可以通过 col 和 row 等参数来一次性构建多个图形。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、做网站、正阳网络推广、成都小程序开发、正阳网络营销、正阳企业策划、正阳品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供正阳建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
relplot 、catplot 、lmplot 等函数可以通过 col 、row 等在一个 Figure 中绘制多个图。这个函数之所以有这些功能,是因为函数底层使用了 FacetGrid 来组装这些图形。
FacetGrid 绘图的 x 和 y 参数必须为 DataFrame 的列的名字。而直接使用 Axes 绘图,参数更灵活。
实际上 Seaborn 的绘图函数中也有大量的直接使用 Axes 进行绘图的,凡是函数名中已经明确显示了这个图的类型,这种图都是使用 Axes 绘图的。比如 sns.scatterplot 、sns.lineplot 、 sns.barplot 等。Axes 绘图可以直接使用之前的 matplotlib 的一些方式设置图的元素。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
tips = pd.read_csv("dataset/tips.csv")
#scatterplot绘图返回一个Axes对象
axes = sns.scatterplot(x="total_bill",y="tip",data=tips)
#利用Axes对象的函数设置一些属性
axes.set_xticks(range(0,60,5))
fig,[ax1,ax2] = plt.subplots(1,2,figsize=(20,5))
#z绘制散点图
#ax参数指定Axes对象
sns.scatterplot(x="total_bill",y="tip",data=tips,ax=ax1)
#绘制柱状图
sns.barplot(x="day",y="total_bill",data=tips,ax=ax2)
#scatterplot的参数可以为数组等形式的数据
sns.scatterplot(x=tips['total_bill'],y='tip',data=tips)
先创建一个 FacetGrid 对象,然后再调用这个对象的 map 方法。其中 map 为方法的第一个参数是一个函数,后续 map 将调用这个函数来绘制图形。后面的参数就是传给这个函数的参数。
其中第一个参数是可以绘制 Axes 图,并且可以接受 color 参数的函数。可以取的值如下:
参数 |
描述 |
对应使用了 FacetGrid 函数 |
plt.plot / sns.lineplot |
绘制折线图 |
sns.relplot(kind=“line”) |
plt.hexbin |
绘制六边形图形 |
sns.jointplot(kind=“hex”) |
plt.hist |
绘制直方图 |
sns.distplot |
plt.scatter / sns.scatterplot |
绘制散点图 |
sns.relplot(kind=“scatter”) |
sns.stripplot |
绘制分类散点图 |
sns.catplot(kind=“strip” |
sns.swarmplot |
绘制散开来的分类散点图 |
sns.catplot(kind=“swarm”) |
sns.boxplot |
绘制箱线图 |
sns.catplot(kind=“box”) |
sns.violinplot |
绘制小提琴图 |
sns.catplot(kind=“violin”) |
sns.pointplot |
绘制点线图 |
sns.catplot(kind=“point”) |
sns.barplot |
绘制条形图 |
sns.catplot(kind=“bar”) |
sns.countplot |
绘制数量柱状图 |
sns.catplot(kind=“count”) |
sns.regplot |
绘制带有回归线的散点图 |
sns.lmplot |
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
tips = pd.read_csv("dataset/tips.csv")
#绘制散点图
g1 = sns.FacetGrid(tips)
g1.map(plt.scatter,"total_bill","tip")
FacetGrid 可以通过 col 和 row 参数在一个 Figure 上绘制多个图形,其中 col 和 row 都是数据集中的某个列的名字。只要指定这个名字,那么就会自动的按照指定列的值的个数绘制指定个数的图形。
#绘制多个图
g2 = sns.FacetGrid(tips,col="day",col_wrap=2)
g2.map(plt.scatter,"total_bill","tip")
可以通过添加 hue 参数来控制每个图中元素的颜色来观察其他的字段
g2 = sns.FacetGrid(tips,col="day",hue="time")
g2.map(plt.scatter,"total_bill","tip")
#添加图例
g2.add_legend()
使用 FacetGrid 绘制出图形后,如果设置每个图形的尺寸或者是宽高比,可以通过在 FacetGrid 中设置 height 和 aspect 来实现,其中 height 表示的是每个图形的尺寸(默认是宽高一致),aspect 表示的是 宽度/高度 的比例。
g3 = sns.FacetGrid(tips,col="smoker",height=4,aspect=1.5)
g3.map(sns.barplot,"day","total_bill")
默认情况下不会添加图例,我们可以通过 g.add_legend() 来添加图例。
(1)通过 title 来控制图例的标题
(2)通过 label_order 来控制图例元素的顺序
sns.set(rc={"font.sans-serif":"SimHei"})
g2 = sns.FacetGrid(tips,col="day",hue="time")
g2.map(plt.scatter,"total_bill","tip")
#添加图例
g2.add_legend(title="标题",label_order=['Lunch','Dinner'])
new_labels = ['午餐','晚餐']
for text,label in zip(g2._legend.texts,new_labels):
text.set_text(label)
设置标题可以通过:
g.set_titles(template=None,
row_template=None,
col_template=None)
来实现,这三个参数分别代表的意义如下:
g = sns.FacetGrid(tips,col="day",row="time")
g.map(sns.regplot,"total_bill","tip")
#设置标题为行
#g.set_titles(template="{row_var}/{row_name}")
#设置标题为列
g.set_titles(template="{col_var}/{col_name}标题")
g = sns.FacetGrid(tips,col="day",row="time")
g.map(sns.scatterplot,"total_bill","tip")
#一次性设置 x 和 y 的坐标的标题
g.set_axis_labels('消费金额','小费')
g.set(facecolor='y')
#设置 x 轴的刻度和刻度文字
g.set(xticks=range(0,50,5),xticklabels=["$%d"%x for x in range(0,50,5)])
g.set 方法可以对 FacetGrid 下的每个子图 Axes 设置属性。其中可以设置的参数完全是根据 Axes 的属性来的。比如可以设置每个 Axes 的 facecolor 等。详情可查询 matplotlib.Axes官方文档
g.set(facecolor='y')
#设置 x 轴的刻度和刻度文字
g.set(xticks=range(0,50,5),xticklabels=["$%d"%x for x in range(0,50,5)])
通过 g.fig 可以获取到当前的 Figure 对象,然后通过 Figure 对象再可以设置其他属性,比如 dip 等。
g = sns.FacetGrid(tips,col="day",row="time")
g.map(sns.scatterplot,"total_bill","tip")
#设置分辨率
g.fig.set_dpi(100)
本文标题:Seaborn可视化进阶之FacetGrid结构图
本文URL:http://www.shufengxianlan.com/qtweb/news8/76858.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联