Seaborn第三方绘图(二)

FacetGrid与调色盘

FacetGrid结构图

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

Axes绘图

实际上seaborn的绘图函数中也有大量的直接使用Axes进行绘图,凡是函数名中已经明确显示这个图的类型,这张图都是使用Axes绘图的。比如sns.scatterplotsns.linplotsns.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)

  1. 初始化matplotlib画布和FacetGrid对象
  2. data : 为DataFrame数据
  3. row,col,hue : 定义数据子集的变量,这些变量将在网格的不同方面绘制

注意

  • 先创建一个FacetGrid对象
  • 再调用这个对象的map方法
  • map的第一个参数是函数
  • 后续map通过调用该函数绘制图形
  • 后面的参数是传给函数的参数

Axes 与 FacetGrid绘图

参数 描述 FacetGrid函数
plt.plotsns.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中设置heightaspect来实现,其中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_stylesns.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)

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章