Seaborn是一个基于Matplotlib的Python数据可视化库,专注于提供一种高级界面用于绘制吸引人且信息丰富的统计图形。它是数据分析和统计建模的理想伴侣,特别是与Pandas这样的数据处理库结合使用时。Seaborn的特点和功能包括:

  1. 面向数据集的API:设计用于简化对多个变量间关系的探索,特别擅长处理分类数据。

  2. 统计图形:提供了多种图表类型,专为展示数据分布、关系、回归分析等统计特性而设计,比如散点图矩阵(pair plots)、联合分布图(jointplots)、箱线图(box plots)、热力图(heatmaps)、线性回归图(regression plots)等。

  3. 分类数据支持:Seaborn擅长处理分类数据,可以很容易地根据类别变量对数据进行分组和着色,使数据的结构和模式一目了然。

  4. 高度集成的绘图接口:通过简洁的函数调用和参数设置就能创建复杂的图表,减少了Matplotlib中可能需要的低级细节操作。

  5. 美观的默认样式:Seaborn提供了比Matplotlib更现代和吸引人的默认视觉样式,包括色彩主题和风格设置,使得图表无需过多调整即可直接用于演示或报告。

  6. 调色板和颜色管理:包含一系列精心设计的调色板,有助于数据模式的忠实展现,同时也允许用户自定义颜色方案。

  7. 多图网格构建:高级抽象功能帮助用户轻松创建复杂的多面板布局,适合展示数据的不同方面或进行比较分析。

  8. 与Pandas和Numpy的紧密集成:无缝处理这两种库的数据结构,使得数据导入、清洗到可视化的流程更加流畅。

  9. 灵活的定制:虽然提供了许多默认设置,但Seaborn也允许用户深入定制图表的各个方面,包括标签、图例、注释和样式。

通过Seaborn,数据科学家和分析师能够快速地从数据中提取见解,并以清晰、美观的方式呈现给受众。

文章:

安装

pip install seaborn

为了能够运行seaborn,请预先安装matplotlib:

pip install matplotlib

引入

为了正常使用seaborn,我们在引入seaborn的同时也要引入matplotlib

import seaborn as sns
import matplotlib.pyplot as plt

内置数据集

seaborn内置了非常多的数据集以供演示,通过get_dataset_names函数以获取,如下:

sns.get_dataset_names() # 返回一个list

输出:

['anagrams',
 'anscombe',
 'attention',
 'brain_networks',
 'car_crashes',
 'diamonds',
 'dots',
 'dowjones',
 'exercise',
 'flights',
 'fmri',
 'geyser',
 'glue',
 'healthexp',
 'iris',
 'mpg',
 'penguins',
 'planets',
 'seaice',
 'taxis',
 'tips',
 'titanic']

Seaborn 内置的一些常见数据集包括:

  • anscombe:四个具有相同统计属性但明显不同的数据集。

  • attention:注意任务中的响应时间数据。

  • brain_networks:大脑网络连接数据。

  • car_crashes:美国各州车祸数据。

  • diamonds:钻石价格和属性数据。

  • dots:视觉注意力实验数据。

  • exercise:运动心率数据。

  • flights:航空乘客数据。

  • gammas:伽马射线强度数据。

  • geyser:Old Faithful 喷泉喷发数据。

  • iris:著名的鸢尾花数据集。

  • mpg:汽车每加仑英里数数据。

  • planets:系外行星发现数据。

  • tips:小费数据集。

  • titanic:泰坦尼克号乘客生存数据。

tips为例,我们可以使用load_dataset函数去获取对应的数据集,例如:

tips = sns.load_dataset("tips") # 返回一个dataframe

我们查看前5行可以看到:

tips.head()

total_bill

tip

sex

smoker

day

time

size

0

16.99

1.01

Female

No

Sun

Dinner

2

1

10.34

1.66

Male

No

Sun

Dinner

3

2

21.01

3.50

Male

No

Sun

Dinner

3

3

23.68

3.31

Male

No

Sun

Dinner

2

4

24.59

3.61

Female

No

Sun

Dinner

4

下面我们就用tips数据集作为例子去学习seaborn

主题设置

Seaborn提供了多种内置主题和颜色调色板,可以通过设置来改变图形的外观。通过函数set_theme去设置我们想要的主题即可,例如:

sns.set_theme(style="whitegrid", palette="pastel")

以下是各类参数的解释:

背景风格(style)

这个参数可以设置一个全局的主题风格,影响所有后续的图表。Seaborn提供了以下预设的背景风格:

  • "darkgrid":默认主题,深色背景和网格线。

  • "whitegrid":白色背景和网格线。

  • "dark":深色背景,无网格线。

  • "white":白色背景,无网格线。

  • "ticks":任何背景颜色,但有轴脊线和刻度线。

whitegrid为例:

sns.set_theme(style="whitegrid")

模板(context)

这个参数可以快速地调整图表的视觉呈现,就像ppt的模板。这样可以适应不同的展示场景,比如学术论文、笔记本演示、演讲或是海报展示。

以下是Seaborn中可用的context选项:

  • "paper":适用于学术论文或印刷材料。此设置下的元素大小和比例经过优化,以便在印刷品中清晰显示,通常会使用较小的字体和标记。

  • "notebook":默认的context设置,适用于在Jupyter Notebook或类似环境中使用。它提供了适中的字体和标记大小,既不会太大也不会太小。

  • "talk":专为演讲或报告设计。在较大的显示屏上,特别是在向观众展示时,此上下文将放大字体和标记,确保图表信息清晰可见。

  • "poster":为制作海报或大型展示而设计。在这种情况下,图表的所有元素都会显著增大,以确保在远距离也能被轻松阅读。

paper为例:

sns.set_theme(context="paper")

调色板(palette)

这个参数可以设定默认的绘图颜色方案,可以选择以下预定义的调色板名称:

  • "deep":一组饱和度较高的颜色。

  • "muted":一组较为柔和的颜色。

  • "pastel":一组淡色调的颜色。

  • "bright":一组明亮鲜艳的颜色。

  • "dark":一组较暗的颜色。

  • "colorblind":一组易于区分且对色盲友好的颜色。

pastel为例:

sns.set_theme(palette="pastel")

这个参数也可以直接传递一个由颜色组成的列表,颜色可以是英文名称、十六进制字符串、RGB 或 RGBA 元组。例如:

my_palette = ["#FF0000", "#00FF00", "#0000FF"]
sns.set_theme(palette=my_palette)

字体与字体比例(font、font_scale)

对于主题中的字体,可以使用font这个参数我们想要的字体,并用font_scale去指定字体的大小比例:

sns.set_theme(font="sans-serif", font_scale=1.5)

基本绘图

下面我们就用tips数据集作为例子去学习seaborn如何进行绘图,详情看上面的数据集的这一章

seaborn的基本绘图中,data传入的数据基本都是pandas的dataframe,后面x和y指定的都是某一列的列名,以散点图为例:

sns.scatterplot(x="total_bill", y="tip", data=tips)

这里的x使用的是total_bill这一列,y使用的是tip这一列

x和y也可以传入list、pandas的序列或者numpy的ndarray:

# x = [1, 2, 3, 4, 5]
# x = pd.Series([1, 2, 3, 4, 5])
x = np.array([1, 2, 3, 4, 5])
# y = [2, 4, 6, 8, 10]
# y = pd.Series([2, 4, 6, 8, 10])
y = np.array([2, 4, 6, 8, 10])
sns.scatterplot(x=x, y=y)
plt.show()

也就是说,x和y输入的更加灵活,既可以指定dataframe的列名,也可以传入数据。下面的例子中,会直接使用列名进行图片的绘制

seaborn在绘制完图片后,都需要使用matplotlib进行展示,下面就不过多赘述

散点图

散点图用于显示两个连续变量之间的关系。seaborn中散点图的写法如下:

sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.show()

在绘制散点图时,scatterplot提供了内置的参数可以用来快速更改其样式:

  • hue:字段名或数组样式的数据,用于对点进行分组并为不同组分配不同的颜色。例如,你可以使用分类变量(如性别)来给散点图中的点着色。

  • size:字段名或数组样式的数据,用于根据数值变量的大小来调整点的大小。

  • style:字段名或数组样式的数据,用于根据分类变量来改变点的标记样式。

  • palette:颜色调色板的名称、字典或列表,用于为 hue 变量的不同水平设置颜色。

  • sizes:一个元组,定义了 size 变量映射到实际点大小的范围。

  • markers:如果 True,则使用默认的标记;如果是一个字典,则提供每个 style 类别的标记。

折线图

折线图适合展示随时间变化的趋势或者两个连续变量之间的关系。seaborn中折线图的写法如下:

sns.lineplot(x="day", y="total_bill", data=tips)
plt.show()

在绘制折线图时,lineplot提供了内置的参数可以用来快速更改其样式:

  • hue: 字段名或数组样式的变量,用于对线条进行分组并为不同组分配不同的颜色。这可以是分类变量,如产品类别或实验条件。

  • size: 字段名或数组样式的变量,用于根据数值变量的大小调整线条的宽度或标记的大小。

  • style: 字段名或数组样式的变量,用于根据分类变量改变线条的样式,如虚线、实线等。

  • palette: 调色板的名称、字典或列表,用于为 hue 变量的不同水平设置颜色。

  • linewidth: 线条的宽度。

  • markers: 是否在数据点上添加标记,可以是布尔值或标记的样式。

  • dashes: 是否绘制虚线或实线。如果是 False,所有线条都是实线。

  • err_style: 错误带的样式,可以是 'band'(默认),'bars' 或 None

  • units: 字段名或数组样式的变量,用于识别不同的观测单位,当数据是重复测量时有用。

  • estimator: 使用哪个统计量估计 y 值,如 'mean'(默认)、'median' 或自定义函数。

  • ci: 置信区间的大小,可以是数值或 None(不显示置信区间)。

  • n_boot: 计算置信区间时使用的引导采样次数。

  • sort: 是否在绘图前对数据按 x 值排序。

  • legend: 图例的显示方式,可以是 'full'、'brief' 或 False

  • axmatplotlib.axes.Axes 对象,如果提供,则在此 Axes 上绘制图形。

条形图

条形图适合展示分类数据的汇总统计。seaborn中条形图的写法如下:

sns.barplot(x="day", y="total_bill", data=tips)
plt.show()

在绘制条形图时,barplot提供了内置的参数可以用来快速更改其样式:

  • hue: 这个参数用于进一步细分数据,通常用于表示第三个分类变量。当使用 hue 参数时,条形图会根据这个变量的不同类别分为多个颜色不同的部分。

  • data:这是一个 Pandas DataFrame 或类似的结构,包含了要绘制成条形图的数据。

  • orderhue_order: 这两个参数允许你自定义 x 轴上的类别顺序和 hue 变量的顺序。

  • estimator: 默认情况下,sns.barplot 绘制的是均值。但是,你可以使用 estimator 参数来改变所计算的统计量,例如可以设置为 np.sum 来绘制总和。

  • ci: 这个参数控制是否以及如何显示置信区间。可以设置为一个百分比,或者 None 来禁用置信区间的显示。

  • n_boot: 如果置信区间被启用,这个参数控制了用于计算置信区间的自助法(bootstrap)的重复次数。

  • orient: 可以是 'v''h',用于指定条形图的垂直或水平方向。

  • colorpalette: 分别用于设置条形图的颜色或颜色调色板。

  • saturation: 控制不同 hue 分类的颜色饱和度。

  • errcolorerrwidthcapsize: 这些参数用于控制置信区间误差线的颜色、宽度和帽宽。

直方图

直方图适合展示单个变量的分布。seaborn中直方图的写法如下:

sns.histplot(x="total_bill", data=tips)
plt.show()

在绘制直方图时,histplot提供了内置的参数可以用来快速更改其样式:

  • weights:可选参数,一个与 x 相同长度的数组,用于对每个样本点进行加权。

  • bins:可以是整数,表示直方图的箱数;也可以是数组,表示箱的边界。

  • binwidth:用于设置箱的固定宽度,可以替代 bins。

  • discrete:当数据是离散的时候,可以设置此参数为 True 来得到更准确的直方图。

  • kde:布尔值,如果为 True,则在直方图上绘制核密度估计曲线。

  • log_scale:如果为 True,则使用对数刻度轴。

  • stat:表示统计量,可以是 "count", "frequency", "density", 或 "probability"。默认为 "count",表示每个箱中的样本数。

  • cumulative:布尔值,如果为 True,则绘制累积直方图。

  • common_norm:如果为 True,所有 KDEs 都将规范化到相同的总区域。如果为 False,则每个 KDE 都将独立规范化。

  • multiple:当数据包含多个变量时,用于确定如何处理重叠的直方图。可以是 "layer", "stack", 或 "fill"

  • element:用于绘制直方图的元素类型。可以是 "bars""step",或 "poly"

  • fill:如果为 True,则填充直方图的区域。

  • shrink:缩放因子,用于缩小直方图的宽度。

箱形图

文章:数据分析的法宝---箱形图(Box Plot)_箱型图-CSDN博客

箱形图又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。

箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。

seaborn中箱形图的写法如下:

sns.boxplot(x="day", y="total_bill", data=tips)
plt.show()

在绘制箱形图时,boxplot提供了内置的参数可以用来快速更改其样式:

  • hue:用于对数据进行分组,基于另一个分类变量。例如,如果你有性别数据,你可以将其作为 hue 参数,从而为每个性别类别创建单独的箱线图。

  • orderhue_order:定义 x 轴上的分类变量顺序和 hue 分类变量的顺序。这些参数允许你控制箱线图在绘图中的显示顺序。

  • orient:控制箱线图的朝向,可以是'v'(垂直,默认)或'h'(水平)。

  • colorpalette:color用于设置单一颜色,而palette可以是一个色板名称、字典或列表,用于给不同类别着色。

  • saturation:控制颜色饱和度,介于 0 到 1 之间。

  • width:控制箱体的宽度。

  • fliersize:控制异常值(离群点)的标记大小。

  • linewidth:控制箱线图线条的宽度。

  • notch:如果设为 True,则会在箱体中添加一个凹口来表示置信区间。

  • whis:控制须的长度,通常是一个浮点数,表示 IQR 的倍数。例如,whis=1.5 会显示 IQR 之外 1.5 倍 IQR 的数据点。

  • bootstrap:如果提供,将使用 bootstrap 方法来估计置信区间,而不是假设正态分布。

小提琴图

文章:数据可视化之小提琴图 – 标点符 (biaodianfu.com)

小提琴图展示数据分布及其概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。

中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。

seaborn中小提琴图的写法如下:

sns.violinplot(x="day", y="total_bill", data=tips)
plt.show()

在绘制小提琴图时,violinplot提供了内置的参数可以用来快速更改其样式:

  • hue:一个分类变量,用于进一步细分数据。例如,如果你想根据不同的类别绘制不同的小提琴图,可以使用此参数。

  • split:当使用 hue 参数时,如果设为 True,将在每个分类水平上创建两个并排的小提琴图,而不是堆叠在一起。

  • scale:控制小提琴的缩放方式。可以是'area'(所有小提琴的面积相同,这是默认值)、'count'(小提琴的宽度与每个分类的观测数量成比例)、或 'width'(所有小提琴的宽度相同)。

  • scale_hue:如果为 True,即使 scale 设置为 'area''width',也会根据 hue 类别调整小提琴的宽度。

  • bw:核密度估计的带宽调整因子。较小的值会产生更尖锐的峰,较大的值会使曲线更平滑。

  • cut:控制绘制密度的尾部部分。cut 参数定义了超出数据范围的尾部绘制多少个带宽单位。默认值为 2。

  • inner:控制是否在小提琴内绘制箱线图或四分位数等额外细节。可以是'box''quartile''point''stick'None

  • split:如果为 True 并且使用了 hue 参数,则在同一分类级别下创建两个并排的小提琴图,而不是堆叠在一起。

  • dodge:当使用 hue 参数时,如果为 True,小提琴图将被稍微错开以避免重叠。

  • orient:小提琴图的方向,可以是'v'(垂直)或'h'(水平)。

  • linewidth:控制轮廓线的宽度。

热力图

文章:数据可视化之热力图&相关系数图(原理+Python代码)_相关系数热力图-CSDN博客

热力图,又名相关系数图。根据热力图中不同方块颜色对应的相关系数的大小,可以判断出变量之间相关性的大小

该相关系数只能度量出变量之间的线性相关关系;也就是说,相关系数越高,则变量间的线性相关程度越高。对于相关系数小的两个变量,只能说明变量间的线性相关程度弱,但不能说明变量之间不存在其它的相关关系,如曲线关系等

seaborn中热力图的写法如下:

corr = tips.corr()
sns.heatmap(corr, annot=True)
plt.show()

在绘制热力图时,heatmap提供了内置的参数可以用来快速更改其样式:

  • annot:布尔值或数组。如果设置为 True,则在每个单元格中显示数值。如果提供一个数组,它应该与 data 具有相同的形状,并且其值将在单元格中显示。

  • fmt:一个字符串,用于控制显示在单元格中的数值的格式。例如,".1f"表示浮点数,保留一位小数。

  • linewidths:浮点数,用于指定单元格边界线的宽度。

  • linecolor:字符串,用于指定单元格边界线的颜色。

  • cmap:字符串或颜色映射对象,用于定义颜色渐变。例如,"coolwarm""Blues""YlGnBu"

  • center:浮点数,用于定义色谱的中心点,这对于对称的色谱特别有用。

  • vminvmax:浮点数,分别定义色谱的最小值和最大值。这可以用来确保不同热力图之间的颜色比较是一致的。

  • square:布尔值,如果为 True,则每个单元格会被绘制为正方形,这对于方阵特别有用。

  • xticklabelsyticklabels:可以是布尔值、整数或列表,用于定义x轴和y轴的标签。如果数据是 DataFrame,这些通常会被自动推断。

  • cbar:布尔值,如果为 True,则在热力图旁边显示颜色条。

  • cbar_kws:字典,包含任何要传递给颜色条的参数。

  • robust:布尔值,如果为 True,则在计算色谱范围时会忽略离群点。

文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
数据分析 第三方库 个人分享
喜欢就支持一下吧