Python数据分析系列(九):python可视化模块—利用Seaborn绘制图表

2024-04-30 20:44

本文主要是介绍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
mpgmpg,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绘制图表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949869

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该