文章目录
FacetGrid与调色盘
FacetGrid结构图
之前我们在绘图的时候,学了relplot
、catplot
、lmplot
等,这些函数可以通过col
、row
等在一个Figure
中绘制多个图。这些函数之所以有这些功能,是因为他们的底层使用了FacetGrid
Axes绘图
实际上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
结合使用
FacetGrid使用
seaborn.FacetGrid(data,row=None,col=None,hue=None)
- 初始化
matplotlib
画布和FacetGrid
对象 - data : 为DataFrame数据
- row,col,hue : 定义数据子集的变量,这些变量将在网格的不同方面绘制
注意
- 先创建一个
FacetGrid
对象 - 再调用这个对象的
map
方法 map
的第一个参数是函数- 后续
map
通过调用该函数绘制图形 - 后面的参数是传给函数的参数
Axes 与 FacetGrid绘图
参数 | 描述 | 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样式风格设置
用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)