seaborn基本使用
2020-07-24 22:14:01 来源:易采站长站 作者:
1.关系图-散点图的绘制
2.关系图-折线图的绘制
3.分类图-分类散点图的绘制
4.分类图-分类分布图的绘制
5.分类图-分类统计图的绘制
6.分布图-单一变量分布图的绘制
7.分布图-二变量分布图的绘制
8.分布图-pairplot分布图的绘制
9.线性回归-线性回归图的绘制
10.FacetGrid绘图-FacetGrid讲解(1)
11.FacetGrid绘图-FacetGrid讲解(2)
12.FacetGrid绘图-FacetGrid讲解(3)
13.seaborn样式和风格设置
14.调色盘-调色盘的使用和定性调色盘
15.调色盘-连续和离散调色盘
16.作业-seaborn作业要求
seaborn库:
Seaborn是一种基于
matplotlib的图形可视化库。他提前已经定义好了一套自己的风格。然后也封装了一系列的方便的绘图函数,之前通过
matplotlib需要很多代码才能完成的绘图,使用
seaborn可能就是一行代码的事情。总结一句话:使用
seaborn绘图比
matplotlib更好看,更简单!安装:
通过
pip:
pip install seaborn。通过
anaconda:
conda install seaborn。官方文档:
https://seaborn.pydata.org/tutorial.html关系图-散点图的绘制
seaborn关系绘图
:relplot
这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图,具体绘制什么图形是通过
kind参数来决定的。实际上以下两个函数就是
relplot的特例:
scatterplot:
relplot(kind='scatter')。
lineplot:
relplot(kind='line')。1. 基本使用:
import seaborn as sns
tips = sns.load_dataset("tips",cache=True)
sns.relplot(x="total_bill",y="tip",data=tips)
效果图如下:

2. 添加hue参数:
hue参数是用来控制第三个变量的颜色显示的。比如我们在以上图的基础之上体现出星期几的参数,那么可以通过以下代码来实现:
sns.relplot(x="total_bill",y="tip",hue="day",data=tips)
效果图如下:

3. 添加col和row参数:
col和
row,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础之上我们想要把
Lunch(午餐)和
Dinner(晚餐)分割成两个图来显示,那么可以通过以下代码来实现:
sns.relplot(x="total_bill",y="tip",hue="day",col="time",data=tips)
效果图如下:

也可以再在
row上添加一个新的变量,比如把性别按照行显示出来,代码如下:
sns.relplot(x="total_bill",y="tip",hue="day",col="time",row="sex",data=tips)
效果图如下:

4. 指定具体的列:
有时候我们的图有很多,默认情况下会在一行中全部展示出来,那么我们可以通过
col_wrap来指定具体多少列。示例代码如下:
sns.relplot(x="total_bill",y="tip",col="day",col_wrap=2,data=tips)
效果图如下:

关系图-折线图的绘制
5. 绘制折线图:
relplot通过设置
kind="line"可以绘制折线图。并且他的功能比
plt.plot更加强大。
plot只能指定具体的
x和
y轴的数据(比如x轴是N个数,y轴也必须为N个数)。而
relplot则可以在自动在两组数据中进行计算绘图。示例代码如下:
fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint",y="signal",kind="line",data=fmri)
效果图如下:
当然也可以添加其他的参数,用来控制整个图的样式和结构。示例代码如下:
# 设置hue为event,就会根据event来绘制不同的颜色
# 设置col为region,就会根据region值的个数来绘制指定个数的图
# 设置style为event,就会根据event来设置线条的样式
sns.relplot(x="timepoint",y="signal",kind="line",hue="event",col="region",style="event",data=fmri)
效果图如下:

分类图-分类散点图的绘制
分类图-分类分布图的绘制
分类图-分类统计图的绘制
分布图-单一变量分布图的绘制
分布图-二变量分布图的绘制
分布图-pairplot分布图的绘制
线性回归-线性回归图的绘制
FacetGrid绘图-FacetGrid讲解(1)
FacetGrid绘图-FacetGrid讲解(2)
FacetGrid绘图-FacetGrid讲解(3)
seaborn样式和风格设置
调色盘-调色盘的使用和定性调色盘
调色盘设置
seaborn可以非常迅速的做出优美的图形,其中就应该得力于他的调色盘机制。
seaborn根据应用场景提供了三种不同类型的调色盘:
定性的、
连续的、
发散的。定性调色盘:
定性调色盘。一般在数据不连续,比较离散,想体现分类的情况下使用。在
seaborn中,使用
sns.color_palette来创建调色盘。1. 默认调色盘:
在
seaborn中,默认情况下就设置了一些颜色供绘图使用。使用
sns.color_palette即可获取。并且我们可以通过
sns.palplot来绘制调色盘。示例代码如下:
current_palette = sns.color_palette()
sns.palplot(current_palette)
效果图如下:

默认的调色盘有10中颜色。这些颜色都有6中风格。分别是:
deep,
muted,
pastel,
bright,
dark,
colorblind。这几种风格的颜色不变,主要调整的是亮度和饱和度。
current_palette = sns.color_palette("dark")
sns.palplot(current_palette)

2. hls圆形颜色系统:
hls圆形颜色系统是颜色按照顺序,经过偏移,无缝形成一个圆形。我们在使用这个调色盘的时候,可以指定需要使用多少种颜色。示例代码如下:
# 使用hls圆形颜色系统,取20个颜色
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))

3. 分类颜色:
分类颜色是
seaborn已经提前给你定义了一些颜色,使用这些颜色在做分类分组的时候可以按照自己的需求选择。示例代码如下:
sns.palplot(sns.color_palette("Paired"))

关于分类的颜色选择,可以通过
sns.choose_colorbrewer_palette("qualitative")来查看。这个方法只能用在
jupyter notebook中。可以选择不同的样式,然后还可以调节饱和度等。效果图如下:
4. 用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")查看离散的色盘有哪些可以选择。还可以通过
sns.diverging_palette(h_neg, h_pos, s=75, l=50, sep=10, n=6, center='light', as_cmap=False)来自定义离散色盘。在这里不再做过多讲解。官方文档:
https://seaborn.pydata.org/tutorial/color_palettes.html。作业-seaborn作业要求
一、 有一组温度数据,按照时间和温度绘制折线图。
bj_temps = [29,27,23,22]bj_hours = ["20时","23时","2时","5时"]plt.figure(figsize=(5,2))
axes = sns.lineplot(range(0,4),bj_temps,marker="o")
axes.set_xticks(range(0,4))
axes.set_xticklabels(bj_hours)
效果图如下:
二、有以下国家数据,根据时间绘制条形图。
legals = pd.read_csv("../法人人数年度数据.csv",encoding='GB18030')
temp_legals = legals[1:11]# 清理数据
new_legals = pd.DataFrame()
for index in temp_legals.index:
row_values =temp_legals.loc[index] for x in range(2009,2018):
year = "%d年"%x
series = pd.Series({"指标":row_values['指标'],'年份':year,"数量":row_values[year]})
new_legals = pd.concat([new_legals,series.to_frame().T])
new_legals.reset_index(drop=True,inplace=True)
# 开始绘图
plt.figure(figsize=(20,5))
sns.barplot(x="年份",y="数量",hue="指标",data=new_legals)
plt.legend(ncol=4)

三、有链家网的数据,请按照以下要求实现绘图:
x轴是
Region(行政区),
y轴是每个区的平均每平米的单价,绘制条形图。
x轴是
Region(行政区),
y轴是每平米的单价,绘制箱线图。
x轴是
Region,
y轴是每平米的单价,绘制
swarm图。以上三个图需要绘制在一个
figure上。
lianjia = pd.read_csv("../lianjia.csv",encoding='utf-8')
lianjia['UnitPrice'] = lianjia['Price']/lianjia['Size']house_mean = lianjia.groupby('Region')['UnitPrice'].mean().sort_values(ascending=False).to_frame().reset_index()
fig,axes_arr = plt.subplots(3,1,figsize=(20,15))
sns.barplot(x="Region",y="UnitPrice",data=house_mean,ax=axes_arr[0])
sns.boxplot(x="Region",y="UnitPrice",data=lianjia,ax=axes_arr[1])
sns.swarmplot(x="Region",y="UnitPrice",data=lianjia,ax=axes_arr[2])

2. 使用
FacetGrid绘制尺寸与单价的关系,并且区分有无电梯。
python fg = sns.FacetGrid(lianjia,col="Elevator",height=6,aspect=2) fg.map(sns.regplot,"Size","UnitPrice") fg.add_legend()
作者:Major_s













闽公网安备 35020302000061号