当前位置: 当前位置:首页 >域名 >Seaborn 可视化进阶之 FacetGrid 结构图 正文

Seaborn 可视化进阶之 FacetGrid 结构图

2025-11-04 13:52:16 来源:多维IT资讯作者:IT科技 点击:650次

FacetGrid 可以通过 col 和 row 等参数来一次性构建多个图形。视化

relplot 、进阶结构catplot 、视化lmplot 等函数可以通过 col 、进阶结构row 等在一个 Figure 中绘制多个图。视化这个函数之所以有这些功能,进阶结构是视化因为函数底层使用了 FacetGrid 来组装这些图形。

FacetGrid 绘图的进阶结构 x 和 y 参数必须为 DataFrame 的列的名字。而直接使用 Axes 绘图,视化参数更灵活。进阶结构

普通的视化 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 基本使用

先创建一个 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 方法

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 方法

通过 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)
作者:IT科技类资讯
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜