FacetGrid结构图
之前我们在绘图的时候,学了relplot
、catplot
、lmpot
等,这些函数可以通过col
、row
等在一个Figure
中绘制多个图。这些函数之所以有这些功能,是因为他们底层使用了FacetGrid
来组装这些图形。
Axes绘图
实际上seaborn
的绘图函数中也有大量的直接使用Axes
进行绘图的,凡是函数名中已经明确显示了这个图的类型,这种图都是使用Axes
绘图的。比如sns.scatterplot
、sns.lineplot
、sns.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
可以通过col
和row
等参数来一次性构建多个图形FacetGrid
绘图的x
和y
参数,必须为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
中设置height
和aspect
来实现,其中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)
实现,这三个参数分别代表的意义如下:
template
:给图设置标题,其中{row_var}:绘制每行图像的名称,{row_name}:绘制每行图像的值
,{col_var}:绘制每列图像的名称,{col_name}:绘制每列图像的值
这几个参数可以使用。col_template
:给图像设置列的标题。其中{col_var}
以及{col_name}
可以使用。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):
一次性设置x
和y
的坐标的标题。
g.set(xticks=range(0,60,10),xticklabels=['0rmb','10rmb','20rmb','30rmb','40rmb','50rmb'])
Seaborn样式风格设置
用seaborn
绘图,比直接使用matplotlib
绘图更加的美观。原因就是因为seaborn
中已经将一些属性的样式进行了调整。我们可以直接使用,也可以修改他的样式。
风格设置参数
在seaborn
中,可以通过三个函数来设置样式。分别是sns.set_style
、sns.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中风格。分别是:deep
,muted
,pastel
, bright
,dark
,colorblind
。这几种风格的颜色不变,主要调整的是亮度和饱和度。
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")
查看离散的色盘有哪些可以选择。