本文主要是介绍Python数据分析系列(九):python可视化模块—利用Seaborn绘制图表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 一、Seaborn特点
- 二、Seaborn函数数据集、样式
- 自带数据集
- 主题样式
- style样式设置
- context设置
- palette颜色盘设置
- despine控制边框
- 三、Seaborn函数分类
- 根据图形控制级别分类
- 根据绘图函数功能分类
- 四、Seaborn绘图数据
- numpy数组数据绘图
- pandas数组数据绘图
- 长格式、短格式数据绘图
- 长格式数据绘图
- 宽格式数据绘图
- 凌乱数据绘图
- 五、关系类图表
- 1.关系绘图API概述
- 2.relplot基本绘图
- relplot散点图
- 分组绘图、分组样式绘图
- 多子图绘图(col、row、col_wrap参数)
- relplot折线图
- 分组绘图
- 分组样式
- 多子图绘制(col、row、col_wrap参数)
- 3.scatterplot散点图
- 多子图绘制(ax参数)
- 4.lineplot折线图
- 多子图绘制(ax参数)
- 六、分类图表
- 1.类别统计绘图API概述
- 2.catplot基本绘图
- catplot绘制分类散点图(stripplot()、swarmplot())
- catplot绘制分类分布图(boxplot()、boxenplot()、violinplot())
- catplot绘制分类估计图(bar()、point()、count())
- 3.分类散点图
- 4.分类分布图
- 5.分类估计图
- 七、分布图表
- 1.分布绘图API概述
- 2.displot基本绘图
- displot绘制单变量分布图(直方图、核密度图、累积分布图)
- 分组绘图
- 多子图绘图(col、row、col_wrap参数)
- displot绘制双变量分布图
- 3.histplot直方图
- 4.kdeplot核分布
- 5.ecdfplot累积分布图
- 6.rugplot地毯图
- 八、多图组合
- 1.jointplot双变量关系图
- 2.pairplot变量关系组图
- 九、回归图
- 1.回归图API概述
- 2.lmplot基本绘图
- 3.regplot绘图
- 4.residplot绘图
- 十、矩阵图
- 1.矩阵图API概述
- 2.clustermap分层聚合热力图
- 3.heatmap热力图
- 十一、绘制多子图
- 1.一图多绘(适用于axes级绘图函数)
- 2.指定子图坐标系(绘制不同种类的图表)
- 3.PairGrid:成对关系网格子图
- 指定绘图方法(map,map_diag(),map_offdiag(),map_upper(),map_lower())
- 成对关系网格子图绘制
- 4.FacetGrid:多面网格子图(row,col,hue)
- 多面网格子图绘制
前言
Seaborn是基于matplotlib的2D绘图库。它在统计绘图方面更加方便易用,并且有自己预定义的样式。Seaborn并非用于替代matplotlib,而是对于数据分析等工作更加方便。
一、Seaborn特点
Seaborn其实是在Matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用Seaborn就能做出很具有吸引力的图,Matplotlib试着让简单的事情更加简单,困难的事情变得可能,而Seaborn就是让困难的东西更加简单。
相比Matplotlib:
- Seaborn绘图函数接口更加简洁,Matplotlib最大的困难是其默认的各种参数,而Seaborn则完全避免了这一问题。
- 对Pandas数据更好友好,Matplotlib不依赖Scipy和Pandas,但是seaborn依赖Scipy和Pandas。
- 预定义风格、样式好看。
二、Seaborn函数数据集、样式
自带数据集
seaborn本身提供一些数据库,用于seaborn学习使用。
-
sns.get_dataset_names():可以查看seaborn所支持的所有数据集。
-
sns.load_dataset(name):指定数据集名称可以加载数据。
-
name参数:从https://github.com/mwaskom/seaborn-data的{name}.csv加载数据集。
-
cache参数:如果为True,则尝试从缓存加载,如果未下载过,则下载后缓存,默认为True。
-
data_home参数:获取缓存目录,用sns.get_data_home()可以获取缓存目录。windows上默认为"C:\Users\user\seaborn-data"。
-
kargs:pandas.read_csv()函数支持的参数都可以用。
-
如下所示为加载“tips”数据集。加载出来的数据以pandas中DataFrame对象实例保存。
tips=sns.load_dataset("tips")
print(type(tips)) # <class 'pandas.core.frame.DataFrame'>
load_datase()t函数下载可能会报错:URLError: <urlopen error [Errno 11004] getaddrinfo failed>,可以用https://github.com/mwaskom/seaborn-data下载所有文件放到缓存目录就ok了。
数据集说明:
数据集名称 | 描述 |
---|---|
flights | 航空公司从1949年到1960年每个月乘坐人数。(有三列数据,分别是:年、月、乘客数量) |
anagrams | 来自一个心理学实验的数据,二十名测试者,分为注意力集中和不集中两类,每个人玩回文字字谜游戏,每个人记录三种游戏结果得分情况。 |
tips | 餐厅小费数据,由日期,时间,总账单,小费,消费者性别,是否抽烟,以及用餐人数组成。 |
penguins | 企鹅数据集,由物种,岛,鸟嘴长度,鸟嘴宽度,鳍足长度,体重,性别组成。 |
iris | 鸢尾花卉数据集。由花萼长度,花萼宽度,花瓣长度,花瓣宽度,鸢尾花卉种类组成。 |
fmri | 事件相关功能核磁共振成像数据。由测试者,时间点,事件,刺激类型,大脑区域,信号等组成。 |
anscombe | 安斯库姆四重奏数据集。用于展现当数据序列差别非常大时一些统计值却相等的著名数据集。一共包含了4组数据,每组11个散点,四组数据均值、方差、相关系数及线性回归曲线(mean, variance, correlation, and linear regression lines)都相同,但具体分布差别巨大。 |
titanic | 泰坦尼克号船员数据集,数据集描述的是船员的性别、年龄、所在船仓等级等特征及最后是否存活。 |
diamonds | 钻石数据集。由钻石价格、克拉、切割质量、台面、钻石颜色、纯度、X:长度、Y:宽度、Z:深度、总深度百分比组成。 |
attention | |
brain_networks | |
car_crashes | |
dots | |
exercise | |
gammas | |
geyser | |
mpg | mpg,miles per gallon即油耗,数据涉及城市周期燃料消耗(单位为每加仑英里),由油耗,气缸数量,排气量/排量,马力,重量,加速度,出厂时间,产地,车品牌组成。 |
planets | |
taxis |
主题样式
Seaborn提供多种美观大方的外观主题。通过sns.set_theme()方法,可以对图像主题等等外观进行设置。
- sns.set_theme()方法包含参数如下:
- style:坐标轴、刻度样式,样式参数同axes_style()。
- context:控制上下文参数,样式参数同plotting_context()。
- palette:调色板,样式参数同color_palette()。
- font:字体
- rcdict:自定义参数对上述各参数的配置进行覆盖
style样式设置
样式参数控制背景颜色、示范启用网格等样式属性。
通过以下设置来应用样式:
- set_theme(style):设置样式
- sns.set_style(style=None,rc=None):设置样式
- set.axes_style(style=None,rc=None):获取局部图表风格样式,或者作为上下文管理器,临时改变样式。
三个函数的样式参数同。
示例:
获取默认样式,返回一个样式字典。
import matplotlib.pyplot as plt
import seaborn as sns
sns.axes_style()
{'axes.facecolor': '#EAEAF2','axes.edgecolor': 'white','axes.grid': True,'axes.axisbelow': True,'axes.labelcolor': '.15','figure.facecolor': 'white','grid.color': 'white','grid.linestyle': '-','text.color': '.15','xtick.color': '.15','ytick.color': '.15','xtick.direction': 'out','ytick.direction': 'out','lines.solid_capstyle': <CapStyle.round: 'round'>,'patch.edgecolor': 'w','patch.force_edgecolor': True,'image.cmap': 'rocket','font.family': ['sans-serif'],'font.sans-serif': ['Arial','DejaVu Sans','Liberation Sans','Bitstream Vera Sans','sans-serif'],'xtick.bottom': False,'xtick.top': False,'ytick.left': False,'ytick.right': False,'axes.spines.left': True,'axes.spines.bottom': True,'axes.spines.right': True,'axes.spines.top': True}
自定义样式,style可以传递一个dict对象,对坐标轴各项参数进行配置。
sns.set_theme(style=style)
plt.show()
自带5种主题风格样式。
- darkgrid(默认值):深色网格主题。
data=sns.load_dataset("tips")
sns.set_theme(style="darkgrid")
# sns.set_style("darkgrid")
# sns.axes_style("darkgrid")
sns.relplot(data=data,x="total_bill",y="tip")
plt.show()
- whitegrid:浅色网格主题。
sns.set_theme(style="whitegrid")
# sns.set_style("whitegrid")
# sns.axes_style("whitegrid")
sns.relplot(data=data,x="total_bill",y="tip")
plt.show()
- dark:深色主题,没有网格。
sns.set_theme(style="dark")
# sns.set_style("dark")
# sns.axes_style("dark")
sns.relplot(data=data,x="total_bill",y="tip")
plt.show()
- white:浅色主题,没有网格。
sns.set_theme(style="white")
# sns.set_style("white")
# sns.axes_style("white")
sns.relplot(data=data,x="total_bill",y="tip")
plt.show()
- ticks:深色主题,带有刻度标记。
sns.set_theme(style="ticks")
# sns.set_style("ticks")
# sns.axes_style("ticks")
sns.relplot(data=data,x="total_bill",y="tip")
plt.show()
用rc覆盖样式中部分参数。
sns.set_theme(style="whitegrid",rc={"grid.color": ".6", "grid.linestyle": ":"})
# sns.set_style("whitegrid",{"grid.color": ".6", "grid.linestyle": ":"})
# sns.axes_style("darkgrid", rc={'axes.grid':True})
context设置
context可以对标签、线条和绘图的其他元素的大小进行配置。
通过以下设置来应用尺寸绘图:
- set_theme(context)
- sns.set_context()
- sns.plotting_context()
三个函数同参数。
示例:
自定义context。
context = {'font.size': 15.0,'axes.labelsize': 'medium','axes.titlesize': 'large','xtick.labelsize': 'medium','ytick.labelsize': 'medium','legend.fontsize': 'medium','axes.linewidth': 0.8,'grid.linewidth': 0.8,'lines.linewidth': 1.5,'lines.markersize': 6.0,'patch.linewidth': 1.0,'xtick.major.width': 0.8,'ytick.major.width': 0.8,'xtick.minor.width': 0.6,'ytick.minor.width': 0.6,'xtick.major.size': 3.5,'ytick.major.size': 3.5,'xtick.minor.size': 2.0,'ytick.minor.size': 2.0,'legend.title_fontsize': None}sns.set_theme(context=context)
sns.relplot(data=data,x="total_bill",y="tip")
Seaborn自带的几中context选项。
- notebook(默认值):稍大的尺寸
sns.set_theme(context="notebook")
sns.relplot(x="total_bill",y="tip",data=data)
plt.show()
- paper:最小的尺寸
sns.set_theme(context="paper")
sns.relplot(x="total_bill",y="tip",data=data)
plt.show()
- talk:更大的尺寸
sns.set_theme(context="talk")
sns.relplot(x="total_bill",y="tip",data=data)
plt.show()
- poster:最大的尺寸
sns.set_theme(context="poster")
sns.relplot(x="total_bill",y="tip",data=data)
plt.show()
palette颜色盘设置
通过以下设置来应用颜色盘:
- sns.set_theme(palette)
- sns.set_palette()
- sns.color_palette()
三个函数同参数,参数可以是:
- seaborn的palette名称(颜色盘名称):deep,muted,bright,pastel,dark,colorblind等。
- “husl"或"hls”,表示huls颜色系统或者hsl颜色系统。
- 关键字处理颜色:“light:”,“dark:”,“blend:”
- matplotlib的colormap名称(颜色列表),比如"Blues",“BuGn_r”,“GnBu_d”,“Oranges”,“coolwarm”。
示例:获取颜色盘,返回一个颜色列表。
sns.color_palette()
sns.set_theme(palette="husl")
sns.color_palette("husl",6)
# sns.set_theme(palette=sns.color_palette("husl",6))
# sns.set_palette("husl",6)
sns.relplot(data=data,x="total_bill",y="tip",hue="size")
plt.show()
despine控制边框
-
despine(fig=None, ax=None, top=True, right=True, left=False, bottom=False, offset=None, trim=False)方法包含参数如下:
- fig:matplotlib figure,optional。
- ax:matplotlib axes, optional,控制特定的子图对象的边框,如果不指定,则默认为整个figure对象。
- top,right,left,bottom:True表示删除对应方向的边界框。
- offset:代表x和y坐标轴偏移量。
- trim:False表示坐标轴没有限制,True表示将坐标轴限制在最大最小值之间。
示例:
sns.despine():删除图像上的上侧和右侧的坐标轴线。
plt.figure(figsize=(10,5))
x=np.linspace(0,14,100)
sns.set_style("ticks")for i in range(5):sns.lineplot(x=x,y=np.sin(x+i*0.5)*(7-i))sns.despine()plt.title("despine")
plt.show()
sns.despine(right,left,top,bottom):自定义隐藏边框。
sns.set_style("ticks")
data=np.random.normal(size=(20,6))+np.arange(6)/2# ticks风格原图
plt.figure()
sns.boxplot(data=data)
plt.title("origin")
plt.show()
# 隐藏左侧和右侧边框后的图
plt.figure()
sns.boxplot(data=data)
sns.despine(right=True,left=True,top=False,bottom=False)
plt.title("despined")
plt.show()
sns.despine(offset,trim):边框位移。
x=np.linspace(0,14,100)
fig=plt.figure(figsize=(10,7))for i in range(5):sns.lineplot(x=x,y=np.cos(x+i*0.5)*(7-i))
sns.despine(offset=50,trim=True) # 图像与x轴和y轴之间的距离都是50,而x轴的坐标轴刻度范围是从0-14,y轴的坐标轴刻度范围是从-6到6。
plt.title("trim=True")
plt.show()
x=np.linspace(0,14,100)
fig=plt.figure(figsize=(10,7))
for i in range(5):sns.lineplot(x=x,y=np.cos(x+i*0.5)*(7-i))
sns.despine(offset=50) # 图像与x轴和y轴之间的距离都是50
plt.title("trim=False")
plt.show()
三、Seaborn函数分类
根据图形控制级别分类
Seaborn绘图函数根据图形层级分为两种类型:
- axes级:绘图函数在间个axes上绘图,函数返回值 就是axes对象。
- 多个axes级函数可以在同一个axes中叠加绘图,在函数中用ax参数指定要绘图的axes。
- figure级:绘图函数在figure上绘图,返回一个FaceGrid对象,类似Figure对象,可以管理figure。
- 函数api统一。
- 容易进行figure级参数设置。
- 可以在坐标系外部绘制图例(figure级别图例)。
注意:
多个axes级函数可以在同一个axes中叠加绘图,但figure级函数不行。
根据绘图函数功能分类
Seaborn绘图函数根据功能可以分为5个大类21种图,分别关系类图表、分类图表、分布图表、回归图、矩阵图。每组功能都提供一个figure级函数(可以实现本组函数绘图函数功能,api统一),同时提供若干个axes级函数。
Relational plots 关系类图表
- relplot() 关系类图表的接口,figure级函数,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图:
- scatterplot() 散点图,axes级函数
- lineplot() 折线图,axes级函数
Categorical plots 分类图表
- catplot() 分类图表的接口,figure级函数,其实是下面八种图表的集成,通过指定kind参数可以画出下面的八种图:
- stripplot() 分类散点图,axes级函数
- swarmplot() 能够显示分布密度的分类散点图,axes级函数
- boxplot() 箱图,axes级函数
- violinplot() 小提琴图,axes级函数
- boxenplot() 增强箱图,axes级函数
- pointplot() 点图,axes级函数
- barplot() 条形图,axes级函数
- countplot() 计数图,axes级函数
Distribution plot 分布图
- distplot() 直方图,质量估计图,figure级函数
- histplot() 直方图,axes级函数。
- kdeplot() 核函数密度估计图,axes级函数
- ecdfplot() 累积分布图,axes级函数
- rugplot() 将数组中的数据点绘制为轴上的数据,地毯图,axes级函数
还有两个特殊的figure级函数,将多个子图组合的图形。
- jointplot()函数,返回JointGrid对象。同时绘制3个子图,在绘制二维图的基础上,在图形上方和右侧绘制分布图。
- pairplot()函数,返回PairGrid对象。(配对分布统计图)
Regression plots 回归图
- lmplot() 回归模型图,figure级函数
- regplot() 线性回归图,axes级函数
- residplot() 线性回归残差图,axes级函数
Matrix plots 矩阵图
- clustermap() 聚集图,figure级函数
- heatmap() 热力图,axes级函数
几乎所有axes级函数绘制的图形,都可以用figure级函数实现相同的效果。
四、Seaborn绘图数据
Seaborn支持多种不同数据集格式,大多数函数接受pandas、numpy以及python类型(如列表、字典)数据。
numpy数组数据绘图
import numpy as np
import seaborn as sns
import matplotlob.pyplot as plt#准备数据
x=np.linspace(0,4*np.pi,100)
y=np.sin(x)#绘图
sns.replot(x=x,y=y,kind="line")#显示图形
plt.show()
pandas数组数据绘图
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt# 准备数据
df=pd.DataFrame({'x':[1,2,3,4,5],'y':[1,3,2,4,5]})# 绘图
sns.relplot(x='x',y='y',data=df,kind='line')#显示图形
plt.show()
长格式、短格式数据绘图
长格式、短格式数据形式:
1、长格式
长格式数据,变量由键唯一定义
import pandas as pd
import numpy as np
df=pd.DataFrame({"year":[2020]*12+[2021]*12+[2022]*12+[2023]*12+[2024]*12,
"month":['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']*5,"passengers":np.random.choice(np.arange(100,500),60)})
2、宽格式
宽格式数据,变量由表头定义
df=df.pivot(index="year",columns="month",values="passengers")
长格式数据绘图
seaborn可以直接用长格式数据绘图,用hue参数指定用于分组的列(即转宽格式后变为列标签的列)。
import seaborn as sns #惯例将seaborn导入为sns
import matplotlib.pyplot as plt #显示图形还是需要依靠matplotlibsns.relplot(data=df,x="year",y="passengers",hue="month",kind="line")
plt.show()
sns.relplot(data=df,x="month",y="passengers",hue="year",kind="line")
plt.show()
宽格式数据绘图
宽格式每列绘图:
宽格式数据中,每列都是一个数据系列,可以绘制一条曲线,默认情况下,不
这篇关于Python数据分析系列(九):python可视化模块—利用Seaborn绘制图表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!