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

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c