5-3 FacetGrid与调色盘

FacetGrid结构图

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

Axes绘图

实际上seaborn的绘图函数中也有大量的直接使用Axes进行绘图的,凡是函数名中已经明确显示了这个图的类型,这种图都是使用Axes绘图的。比如sns.scatterplotsns.lineplotsns.barplot等。Axes绘图可以直接使用之前matplotlib的一些方式设置图的元素。

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])

注意

  • 凡是函数名中已经明确了图的类型,都是直接使用Axes进行绘图。构建子图需结合matplotlib
  • 直接使用Axes绘图,参数更加灵活(可以使用标签索引或字符串)
  • relplot/catplot/lmplot等函数都是用FacetGrid方法技术
  • FaceGrid可以通过colrow等参数来一次性构建多个图形
  • FacetGrid绘图的xy参数,必须为DataFrame的列的名字(字符串)

FacetGrid使用

  • 先创建一个FacetGrid对象
  • 再调用这个对象的map方法
  • map的第一个参数是函数
  • 后续map通过调用该函数绘制图形
  • 后面的参数是传给函数的参数
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips)
g.map(plt.scatter,"total_bill","tip")

在这里插入图片描述
其中第一个参数是可以绘制Axes图,并且可以接收color参数的函数。

参数描述FacetGrid函数
plt.plot/sns.lineplot绘制折线图sns.relplot(kind=“line”)
plt.hexbin绘制六边形图形sns.jointplot(kind=“hex”)
plt.scatter/sns.scatterplot绘制散点图sns.relplot(kind=“scatter”)
plt.hist绘制直方图sns.distplot
sns.stripplot绘制分类散点图sns.catplot(kind=“strip”)
sns.swarmplot散开来的分类散点图sns.catplot(kind=“swarm”)
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

设置图形的尺寸

使用FacetGrid绘制出图形后,有时候我们想设置每个图形的尺寸或者是宽高比,那么我们可以通过在FacetGrid中设置heightaspect来实现,其中height表示的是每个图形的尺寸(默认是宽高一致),aspect表示的是宽度/高度的比例。

g = sns.FacetGrid(tips,col="day",row="time",height=10,aspect=2)
g.map(sns.regplot,"total_bill","tip")

设置图例

默认情况下,不会添加图例,我们可以通过g.add_legend()来添加图例。

g = sns.FacetGrid(tips,col="day",hue="time")
g.map(sns.regplot,"total_bill","tip")
g.add_legend()

注意:

  • 通过title来控制图例的标题。
  • 通过label_order来控制图例元素的顺序。
sns.set(rc={"font.sans-serif":"simhei"})
g3 = sns.FacetGrid(tips,col="day",hue="time")
g3.map(plt.scatter,"total_bill","tip")
new_labels = ['午餐','晚餐']
g3.add_legend(title="时间")
for t,l in zip(g3._legend.texts,new_labels):
	t,set_text(1)

设置标题

设置标题可以通过g.set_titles(template=None,row_template=None,col_templat=None)实现,这三个参数分别代表的意义如下:

  1. template:给图设置标题,其中{row_var}:绘制每行图像的名称,{row_name}:绘制每行图像的值{col_var}:绘制每列图像的名称,{col_name}:绘制每列图像的值这几个参数可以使用。
  2. col_template:给图像设置列的标题。其中{col_var}以及{col_name}可以使用。
  3. row_template:给图像设置行标题。其中有{row_var}以及{row_nane}可以使用。
g = sns.FacetGrid(tips,col="day",row="time")
g.map(sns.regplot,"total_bill","tip")
g.set_titles(template="时间{row_name}/星期{col_name}")

设置坐标轴

g.set_axis_labels(x_var,y_var):一次性设置xy的坐标的标题。

g.set(xticks=range(0,60,10),xticklabels=['0rmb','10rmb','20rmb','30rmb','40rmb','50rmb'])

Seaborn样式风格设置

seaborn绘图,比直接使用matplotlib绘图更加的美观。原因就是因为seaborn中已经将一些属性的样式进行了调整。我们可以直接使用,也可以修改他的样式。

风格设置参数

seaborn中,可以通过三个函数来设置样式。分别是sns.set_stylesns.axes_style以及sns.set方法。

sns.axes_style

  • 如果没有传任何参数 返回的是字段属性
  • 临时的样式
with sns.axes_style("dark",{"ytick.left":True}):
    sns.scatterplot(x="total_bill",y="tip",data=tips)

sns.set_style()

这个函数跟sns.axes_style一样,也是用来设置绘图风格。但是这个函数的风格设置,不是临时的,而是一旦设置了,那么下面的所有绘图都是用这个风格。

sns.set_style("darkgrid")
sns.scatterplot(x="total_bill",y="tip",data=tips)

sns.set

set方法也是用来设置样式的,他的功能更加强大。除了style以外,还可以设置调色板,字体,字体大小,颜色等,也可以设置其他的matplotlib.rcParams可以接收的参数。

sns.set(rc={"lines.linewidth":4})
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint",y="signal",data=fmri)

调色盘设置

seaborn可以非常迅速的做出优美的图形,其中就应该得力于他的调色盘机制。seaborn根据应用场景提供了三种不同类型的调色盘:定性的连续的发散的

定性调色盘

定性调色盘。一般在数据不连续,比较离散,想体现分类的情况下使用。

默认调色盘

在seaborn中,默认情况下就设置了一些颜色供绘图使用。使用sns.color_palette即可获取。并且我们可以通过sns.palplot来绘制调色盘。

current_palette = sns.color_palette()
sns.palplot(current_palette)

在这里插入图片描述
默认的调色盘有10中颜色。这些颜色都有6中风格。分别是:deepmutedpastelbrightdarkcolorblind。这几种风格的颜色不变,主要调整的是亮度和饱和度。

在这里插入图片描述

hls圆形颜色系统

hls圆形颜色系统是颜色按照顺序,经过偏移,无缝形成一个圆形。我们在使用这个调色盘的时候,可以指定需要使用多少种颜色。

sns.palplot(sns.color_palette("hls",20))

在这里插入图片描述
也可以使用另外一个函数sns.hls_palette(n_colors=6, h=0.01, l=0.6, s=0.65)来实现。这个函数可以传递更多的参数。比如我们可以通过更改hue来更改开始的颜色,通过更改l来调整亮度,通过更改s来调整饱和度。

sns.palplot(sns.hls_palette(10,h=0.4,l=0.4,s=0.5))

在这里插入图片描述
另外也可以通过sns.husl_palette来实现色系的调整,这个方法比sns.hls_palette亮度和饱和度更加的均匀。

sns.palplot(sns.husl_palette(10))

在这里插入图片描述

分类颜色

分类颜色是seaborn已经提前给你定义了一些颜色,使用这些颜色在做分类分组的时候可以按照自己的需求选择。

sns.palplot(sns.color_palette("Paired"))

在这里插入图片描述
关于分类的颜色选择,可以通过sns.choose_colorbrewer_palette("qualitative")来查看。这个方法只能用在jupyter notebook中。可以选择不同的样式,然后还可以调节饱和度等。
在这里插入图片描述

用xkcd颜色

xkcd是一个漫画名称或者是工作室。xkcd开展了一项众包活动,为随机的RGB颜色命名。这产生了一组954种命名颜色。我们可以从sns.xkcd_palette里面提取颜色。提取到后,如果想要用在palette参数中,那么还需要放到sns.xkcd_palette中。所有的xkcd颜色的名称可以参考官网:https://xkcd.com/color/rgb/

# 获取名字为blue green的颜色
print(sns.xkcd_rgb["blue green"])
# 用xkcd的颜色名称构建一个palette对象
colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
sns.palplot(sns.xkcd_palette(colors))

连续的颜色盘

有时候我们绘图的时候,想要使用一个同种色系,但是不同深浅,这时候就可以使用连续的颜色盘。

sns.palplot(sns.color_palette("Blues"))

在这里插入图片描述
默认颜色是从浅入深,如果想要从深变浅,那么可以在色系后加一个_r

sns.palplot(sns.color_palette("Blues_r"))

在这里插入图片描述
我们也可以通过sns.choose_colorbrewer_palette("sequential")查看有哪些色系可供选择。

在这里插入图片描述

离散的色盘

离散的色盘,是两边的颜色逐渐加深,中间的颜色最淡。或者是中间的颜色最深,两边的颜色最淡。一般离散的色盘可以用于比如温度,零度以上可以用红色表示,零度以下用蓝色表示。越红的地方,表示温度越高,越蓝的地方,表示温度越低。

values = [12,15,17,18,-5,-10]
with sns.color_palette("RdBu_r"):
    sns.barplot([1,2,3,4,5,6],sorted(values))

在这里插入图片描述
也可以通过sns.choose_colorbrewer_palette("diverging")查看离散的色盘有哪些可以选择。

官方文档

https://seaborn.pydata.org/tutorial/color_palettes.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值