之前我们在绘图的时候,学了relplot
、catplot
、lmplot
等,这些函数可以通过col
、row
等在一个Figure
中绘制多个图。这些函数之所以有这些功能,是因为他们的底层使用了FacetGrid
实际上seaborn
的绘图函数中也有大量的直接使用Axes
进行绘图,凡是函数名中已经明确显示这个图的类型,这张图都是使用Axes
绘图的。比如sns.scatterplot
、sns.linplot
、sns.borplot
等。Axes
绘图可以直接使用之前matplotlib
的一些方式设置图的元素。
# subplts为绘制子图,创建一个1*2的矩阵图,figsize为画布大小
# 轴对象以将绘图绘制到该轴上,否则使用当前轴
#
fig,ax = plt.subplots(1,2,figsize=(20,5))
sns.scatterplot(x='total_bill',y='tip',data=tips,ax=ax[0])
sns.barplot(x='day',y='total_bill',data=tips,ax=ax[1])
plt.show()
注意
FacetGrid
可以通过col 和 row 等参数来一次性构建多个图形relplot/catplot/lmplot
等函数都是用的FacetGrid
方法技术Axes
进行绘图FacetGrid
绘图的x和y参数,必须为DataFrame的列的名字,而直接使用Axes
绘图,参数更加灵活Axes
绘图,可以非常方便的跟Matplotlib
结合使用seaborn.FacetGrid(data,row=None,col=None,hue=None)
matplotlib
画布和FacetGrid
对象注意
FacetGrid
对象map
方法map
的第一个参数是函数map
通过调用该函数绘制图形参数 | 描述 | FacetGrid函数 |
---|---|---|
plt.plot 、sns.lineplot |
绘制折线图 | sns.relplot(kind='line') |
plt.hexbin |
绘制六边形图 | sns.jointplot(kind='hex') |
plt.scatterplot |
绘制散点图 | sns.relplot(kind='scatter') |
plt.hist |
绘制直方图 | sns.distplot |
sns.scatterplot |
绘制分类散点图 | sns.catplot(kind='scatter') |
sns.swarmplot |
散开来的分散点图 | sns.catplt(kind='swarm') |
sns.violinplot |
绘制小提琴图 | sns.catplot(kind='violine') |
sns.pointplot |
绘制点线图 | sns.catplot(kind='point') |
sns.barplot |
绘制条形图 | sns.catplot(kind='barplot') |
sns.countplot |
绘制数量柱状图 | sns.catplot(kind='count') |
使用FacetGrid
绘制图形后,有时候我们想设置每个图形的尺寸或者是宽高比,那么我们通过FacetGrid
中设置height
和aspect
来实现,其中height
表示每个图形的尺寸,aspect
表示宽高比例
# 传入的参数data
# height 为高度
# aspect 为宽度
g = sns.FacetGrid(tips,col = 'smoker',height=5,aspect=1)
g.map(sns.barplot,'day', 'total_bill')
add_lengend()
# 设置显示中文
sns.set(rc={"font.sans-serif":"SimHei"})
# 初始化FacetGrid
fg = sns.FacetGrid(tips,col='day',hue='time')
# map进行绘图
fg.map(sns.regplot,'total_bill','tip')
# 添加图例
fg.add_legend(title='标题',label_order=['Dinner','Lunch'])
new_labels = ["晚餐","午餐"]
for text,lable in zip(fg._legend.texts,new_labels):
text.set_text(lable)
set_titles()
设置标题可以通过g.set_titles(templates=None,row_templates=None,col_templates=None)
来实现,三个参数分别代表的意义如下:
template
:给图设置标题,其中有{row_var}
绘制每行图像的名称,{row_name}
绘制每行图像的值,{col_var}
绘制每列图像的值,{col_name}
绘制每列图像的值。col_template
: 每图像设置列的标题。其中有{col_var}
以及{col_name}
可以使用。row_template
: 给图像设置行的标题。其中有{row_var}
以及{row_name}
可以使用。# 设置中文
sns.set(rc={'font.sans-serif':'SimHei'})
# 初始化FacetGrid
g = sns.FacetGrid(tips,col='day',row='time')
# 设置标题
# 这里的col_name 为指定的col的值
g.map(sns.scatterplot,'total_bill','tip')
# template
g.set_titles(template = '时间{row_name}-星期:{col_name}')
set_axis_lables()
# 设置中文
sns.set(rc={'font.sans-serif':'SimHei'})
# 初始化FacetGrid
g = sns.FacetGrid(tips,col='day',row='time')
# 设置标题
# 这里的col_name 为指定的col的值
g.map(sns.scatterplot,'total_bill','tip')
# template
g.set_titles(template = '时间{row_name}-星期:{col_name}')
# 设置坐标轴
g.set_axis_labels("消费金额","消费")
set(facecolor=)
# 设置中文
sns.set(rc={'font.sans-serif':'SimHei'})
# 初始化FacetGrid
g = sns.FacetGrid(tips,col='day',row='time')
# 设置标题
# 这里的col_name 为指定的col的值
g.map(sns.scatterplot,'total_bill','tip')
# template
g.set_titles(template = '时间{row_name}-星期:{col_name}')
# 设置坐标轴
g.set_axis_labels("消费金额","消费")
# 设置背景颜色
g.set(facecolor="g")
用seaborn
绘图,比直接使用matplotlib
绘图更加的美观。原因是在seaborn中已经将一些属性的样式进行了调整。我们可以直接使用。也可以修改他的样式。
在seaborn
中,可以通过三个函数来设置样式。分别是sns.set_style
、sns.axes_style
以及sns.set
方法。
sns.axes_style
# 设置大小
plt.figure(figsize=(15,8))
# 临时设置
with sns.axes_style('darkgrid',rc={'axes.facecolor':'black'}):
sns.lineplot(x='timepoint',y='signal',data=fmri)
plt.show()
sns.set
set方法也是用来设置样式的,他的功能更加强大。除了style
以外,还可以设置调色板,字体,大小,字体大小,颜色,也可以设置其他的matplotlib.rcParams
可以接收的参数。
sns.set(rc={'font.sans-serif':'SimHei','lines.linewidth':5})
sns.lineplot(x='timepoint',y='signal',data=fmri)