本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

FacetGrid结构图

之前我们在绘图的时候,学了relplotcatplotlmplot等,这些函数可以通过colrow等在一个Figure中绘制多个图。这些函数之所以有这些功能,是因为他们的底层使用了FacetGrid来组装这些图形。今天我们就来学习FacetGrid的使用。

一、普通的Axes绘图:

在学习FacetGrid绘图之前,先来了解一下,实际上seaborn的绘图函数中也有大量的直接使用Axes进行绘图的,凡是函数名中已经明确显示了这个图的类型,这种图都是使用Axes绘图的。比如sns.scatterplotsns.lineplotsns.barplot等。Axes绘图可以直接使用之前matplotlib的一些方式设置图的元素。示例代码如下:

fig,[ax1,ax2] = plt.subplots(2,1,figsize=(10,10)) sns.scatterplot(x="total_bill",y="tip",data=tips,ax=ax1) sns.barplot(x="day",y="total_bill",data=tips,ax=ax2)

facetgrid9.png

二、FacetGrid基本使用:

先创建一个FacetGrid对象,然后再调用这个对象的map方法。其中map方法的第一个参数是一个函数,后续map将调用这个函数来绘制图形。后面的参数就是传给这个函数的参数。示例代码如下:

tips = sns.load_dataset("tips") g = sns.FacetGrid(tips) g.map(plt.scatter,"total_bill","tip")

效果图如下:
facetgrid1.png

其中第一个参数是可以绘制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

三、绘制多个图形:

FacetGrid可以通过colrow参数,来在一个Figure上绘制多个图形,其中colrow都是数据集中的某个列的名字。只要指定这个名字,那么就会自动的按照指定列的值的个数绘制指定个数的图形。示例代码如下:

g = sns.FacetGrid(tips,col="day",col_wrap=2) g.map(sns.regplot,"total_bill","tip")

效果图如下:
facetgrid2.png

四、添加颜色观察字段:

可以通过添加hue参数来控制每个图中元素的颜色来观察其他的字段。示例代码如下:

g = sns.FacetGrid(tips,col="day",hue="time") g.map(sns.regplot,"total_bill","tip")

facetgrid4.png

也可以通过hue_kws参数来添加hue散点的属性,比如设置散点的样式等。

五、设置每个图形的尺寸:

使用FacetGrid绘制出图形后,有时候我们想设置每个图形的尺寸或者是宽高比,那么我们可以通过在FacetGrid中设置heightaspect来实现,其中height表示的是每个图形的尺寸(默认是宽高一致),aspect表示的是宽度/高度的比例。示例代码如下:

g = sns.FacetGrid(tips,col="day",row="time",height=10,aspect=2) g.map(sns.regplot,"total_bill","tip")

效果图如下:
facetgrid3.png

六、设置图例:

默认情况下,不会添加图例,我们可以通过g.add_legend()来添加图例。示例代码如下:

g = sns.FacetGrid(tips,col="day",hue="time") g.map(sns.regplot,"total_bill","tip") g.add_legend()

facetgrid5.png

另外还可以:

  1. 通过title来控制图例的标题。
  2. 通过label_order来控制图例元素的顺序。

示例代码如下:

sns.set(rc={"font.sans-serif":"simhei"}) g3 = sns.FacetGrid(tips,col="day",hue="time") g3.map(plt.scatter,"total_bill","tip") new_labels = ['午餐','晚餐'] g3.add_legend(title="时间") for t,l in zip(g3._legend.texts,new_labels): t.set_text(l)

facetgrid6.png

七、设置标题:

设置标题可以通过g.set_titles(template=None,row_template=None,col_template=None)来实现,这三个参数分别代表的意义如下:

  1. template:给图设置标题,其中有{row_var}:绘制每行图像的名称{row_name}:绘制每行图像的值{col_var}:绘制每列图像的名称{col_name}:绘制每列图像的值这几个参数可以使用。
  2. col_template:给图像设置列的标题。其中有{col_var}以及{col_name}可以使用。
  3. row_template:给图像设置行的标题。其中有{row_var}以及{row_name}可以使用。

示例代码如下:

g = sns.FacetGrid(tips,col="day",row="time") g.map(sns.regplot,"total_bill","tip") g.set_titles(template="时间{row_name}/星期{col_name}")

facetgrid7.png

八、设置坐标轴:

  1. g.set_axis_labels(x_var,y_var):一次性设置xy的坐标的标题。
  2. g.set_xlabels(label):设置x轴的标题。
  3. g.set_ylabels(label):设置y轴的标题。
  4. g.set(xticks,yticks):设置xy轴的刻度。
  5. g.set_xticklabels(labels):设置x轴的刻度文字。
  6. g.set_yticklabels(labels):设置y轴的刻度文字。

示例代码如下:

g.set(xticks=range(0,60,10),xticklabels=['$0','$10','$20','$30','$40','$50'])

效果图如下:
facetgrid8.png

九、g.set方法:

g.set方法可以对FacetGrid下的每个子图Axes设置属性。其中可以设置的参数完全是根据Axes的属性来的。比如可以设置每个Axesfacecolor等。关于Axes有哪些属性,请参考matplotlib.Axes的官方文档:https://matplotlib.org/api/axes_api.html?highlight=axes#matplotlib.axes.Axes

十、g.fig

通过g.fig,可以获取到当前的Figure对象。然后通过Figure对象再可以设置其他的属性,比如dip等。

1923人已阅读,今天你学习了吗?

添加新回复
目录