seaborn基本使用

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更好看,更简单!

安装:

通过pippip install seaborn
通过anacondaconda install seaborn

官方文档:

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

关系图-散点图的绘制
seaborn关系绘图
relplot

这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图,具体绘制什么图形是通过kind参数来决定的。实际上以下两个函数就是relplot的特例:

scatterplotrelplot(kind='scatter')
lineplotrelplot(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参数:

colrow,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础之上我们想要把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只能指定具体的xy轴的数据(比如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中风格。分别是:deepmutedpastelbrightdarkcolorblind。这几种风格的颜色不变,主要调整的是亮度和饱和度。

在这里插入图片描述

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轴是Regiony轴是每平米的单价,绘制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

相关推荐

ASP.NET Core3.x API版本控制的实现

详解如何在C#/.NET Core中使用责任链模式

el-table树形表格表单验证(列表生成序号)

1个文件如何轻松搞定Asp.net core 3.1动态页面转静态页面