
FacetGrid 可以通过 col 和 row 等参数来一次性构建多个图形。视化
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)来实现,这三个参数分别代表的意义如下:
template:给图设置标题,其中有 {row_var}:绘制每行图像的名称,{row_name}:绘制每行图像的值,{col_var}:绘制每列图像的名称,{col_name}:绘制每列图像的值col_template:给图像设置列的标题,其中有 {col_var} 以及 {col_name} 可以使用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_var}/{row_name}")
#设置标题为列
g.set_titles(template="{col_var}/{col_name}标题")
g.set_axis_labels(x_var,y_var):一次性设置 x 和 y 的云服务器提供商坐标的标题g.set_xlabels(label):设置 x 轴的标题g.set_ylabels(label):设置 y 轴的标题g.set(xticks,yticks):设置 x 和 y 轴的刻度g.set_xticklables(labels):设置 x 轴的刻度文字g.set_yticklabels(labels):设置 y 轴的刻度文字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)