当前位置: 首页 > news >正文

机器学习 Day07seaborn库绘图学习

1.单变量绘制(直方图,核密度曲线图)

使用 distplot 函数绘制带核密度估计曲线的直方图

import seaborn as sns
ax = sns.distplot(arr, bins=10, hist=True, kde=True, rug=True) 

seaborn 是基于 matplotlib 的数据可视化库,import seaborn as sns 将其导入。sns.distplot 用于绘制数据分布。

  • arr 是前面生成的包含 100 个随机数的数组,作为要观察的数据。
  • bins=10 表示将数据分组,绘制 10 个条形的直方图。
  • hist=True 表示绘制直方图,这是默认开启的。
  • kde=True 表示绘制高斯核密度估计曲线,用来估计数据的概率密度分布。
  • rug=True 表示在 x 轴上绘制 rugplot,也就是用小细条表示每个数据点的位置。
  • 总而言之就是每个参数控制每个部分的显示

绘制纯核密度估计曲线

# 创建包含500个位于[0, 100]之间整数的随机数组
array_random = np.random.randint(0, 100, 500)
# 绘制核密度估计曲线
sns.distplot(array_random, hist=False, rug=True)

np.random.randint(0, 100, 500) 生成一个包含 500 个介于 0(包括)到 100(不包括)之间随机整数的数组。然后调用 sns.distplothist=False 表示不绘制直方图,只绘制核密度估计曲线;rug=True 同样是在 x 轴上绘制表示数据点位置的小细条 。

 

2.双变量分布(主要是kind控制类型散点图,直方图,核密度估计图)

函数:seaborn.jointplot 函数的常用参数如下:

  1. xy:指定用于绘制双变量图的两个变量,通常是数据集中列的名称。
  2. data:数据来源,可以是 pandas 的 DataFrame 等数据结构,提供 x 和 y 变量对应的数据。
  3. kind:表示绘制图形的类型,如 'scatter'(散点图,默认值 )、'hex'(二维直方图,六边形分箱 )、'kde'(核密度估计图 )等。
  4. stat_func:用于计算有关关系的统计量并标注图,比如计算相关系数等统计值并标注在图上,默认 None 。
  5. color:设置绘图元素的颜色。
  6. size:用于设置图的大小(正方形 ),控制整体图形的视觉尺寸。
  7. ratio:表示中心图与侧边图的比例,该参数值越大,中心图占比越大。中心图就是那个正方形的图。
  8. space:用于设置中心图与侧边图的间隔大小。
  9. dropna:接收布尔类型,默认 True,表示是否删除含有缺失值的行。

案例:

  1. 导入库
import numpy as np
import pandas as pd
import seaborn as sns

这里导入了三个常用库。numpy 用于数值计算,pandas 用于数据处理和分析,seaborn 用于数据可视化。
2. 创建 DataFrame 对象

dataframe_obj = pd.DataFrame({"x": np.random.randn(500), "y": np.random.randn(500)})

使用 pandas 的 DataFrame 函数创建了一个数据框。其中,键 "x" 和 "y" 分别对应两列数据,值是通过 np.random.randn(500) 生成的 500 个服从标准正态分布的随机数,也就是为散点图准备了横、纵坐标的数据。
3. 绘制散点图

sns.jointplot(x="x", y="y", data=dataframe_obj)

调用 seaborn 的 jointplot 函数绘制双变量图形。

  • x="x" 和 y="y" 表示使用数据框 dataframe_obj 中的 "x" 列作为横坐标数据,"y" 列作为纵坐标数据 。
  • data=dataframe_obj 指定了数据来源是前面创建的数据框。
    jointplot 函数默认 kind='scatter' ,所以绘制出的是散点图,同时在图形的上方和右方还分别展示了 x 变量和 y 变量的单变量分布(直方图形式) 。

这个是核密度曲线kde

这个是默认的散点图scatter

这个是直方图hex

3.皮尔逊热力图的画法 .

在 seaborn 库中绘制相关系数热力图主要通过 heatmap 函数实现,以下是具体步骤和代码示例:

1. 导入必要的库

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

这里导入 numpy 用于数值计算,pandas 用于数据处理(如创建和操作数据框 ),seaborn 用于绘图,matplotlib.pyplot 用于显示图形。

2. 准备数据

假设已有一个包含多列数值数据的数据框 df ,例如:

# 生成示例数据
data = {
    'col1': np.random.randn(100),
    'col2': np.random.randn(100),
    'col3': np.random.randn(100)
}
df = pd.DataFrame(data)

3. 计算相关系数矩阵

使用 pandas 的 corr 方法计算数据框各列之间的相关系数:

corr_matrix = df.corr()

corr_matrix 是一个方阵,行列索引均为数据框的列名,矩阵元素表示对应两列数据的相关系数,取值范围在 -1 到 1 之间,1 表示完全正相关,-1 表示完全负相关,0 表示不相关。

4. 绘制热力图

plt.figure(figsize=(10, 8))  # 设置图形大小
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Correlation Heatmap')  # 添加标题
plt.show()
  • plt.figure(figsize=(10, 8)) :设置图形的宽度为 10 单位,高度为 8 单位,调整图形整体视觉尺寸。
  • sns.heatmap :seaborn 的热力图绘制函数。
    • corr_matrix :传入前面计算得到的相关系数矩阵作为绘图数据。
    • annot=True :在热力图的每个方格中显示具体的相关系数数值,方便查看。
    • cmap='coolwarm' :指定颜色映射,'coolwarm' 是一种双色渐变的颜色方案,能较好区分正负相关,蓝色系表示负相关,红色系表示正相关。也可选用其他颜色映射,如 'viridis' 等。
    • linewidths=0.5 :在每个方格之间添加宽度为 0.5 的分隔线,使图形更清晰易读。
  • plt.title('Correlation Heatmap') :为图形添加标题。
  • plt.show() :显示绘制好的热力图。

完整代码示例如下:用的时候改数据即可

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 生成示例数据
data = {
    'col1': np.random.randn(100),
    'col2': np.random.randn(100),
    'col3': np.random.randn(100)
}
df = pd.DataFrame(data)

# 计算相关系数矩阵
corr_matrix = df.corr()

# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Correlation Heatmap')
plt.show()

通过上述步骤,就能在 seaborn 库中绘制出展示数据相关系数的热力图,直观呈现变量间的相关关系。

4.成对双变量分布

很简单我们直接看案例

  1. 加载数据集
dataset = sns.load_dataset("iris")

seaborn 提供了一些内置数据集方便示例和练习,load_dataset 函数用于加载这些数据集。这里加载的 "iris" 数据集,也叫鸢尾花数据集 ,是机器学习领域常用的分类数据集,包含花萼长度(sepal_length)、花萼宽度(sepal_width)、花瓣长度(petal_length)、花瓣宽度(petal_width) 4 个特征变量以及花朵所属类别(species)变量。
2. 绘制成对双变量分布

sns.pairplot(dataset)

pairplot 函数用于绘制成对的双变量分布。它会创建一个坐标轴矩阵:

  • 矩阵的非对角线元素展示的是不同变量两两之间的关系,默认以散点图形式呈现,能直观看到变量间的相关性和分布趋势。
  • 矩阵的对角线元素展示的是单个变量的分布情况,默认以直方图形式呈现,可了解单个变量的分布特征 。
  • 如下图

以上这些都是用于连续数值类型的数据的,接下来我们看分类数据有什么图

5分类数据绘图

5.1类别散点图(通常显示每个类里数值的分布,所以类为横坐标,数值型变量为纵坐标

stripplot 函数主要参数

  1. xy用于指定绘制长格式数据的输入变量。x 通常对应横坐标变量(一般为类别型变量 ),y 对应纵坐标变量(一般为数值型变量 ),因为要绘制类别上数据的分布。比如在 sns.stripplot(x="day", y="total_bill", data=tips) 中,"day" 是星期几,属于类别型变量,放在横坐标;"total_bill" 是消费总金额,为数值型变量,放在纵坐标。
  2. hue用于指定一个分类变量,根据该变量的不同类别对数据点进行分组并以不同颜色显示 。例如,若数据集中有性别变量,指定 hue="sex",那么不同性别的数据点会以不同颜色呈现,便于区分不同组的数据分布情况。
  3. data提供绘图所需的数据集。可以是 pandas 的 DataFrame 结构。如果 x 和 y 不存在于该数据集中,函数会将其视为宽格式数据;若存在,则视为长格式数据 。
  4. order用于指定 x 变量中类别变量的顺序。比如,若 x 变量有 ["Mon", "Tue", "Wed"] 三个类别,默认可能按字母顺序展示,通过 order=["Mon", "Tue", "Wed"] 可指定按此顺序展示横坐标类别。
  5. hue_order与 order 类似,不过是针对 hue 变量指定类别顺序。当 hue 变量有多个类别时,可通过它确定颜色分组的展示顺序。
  6. jitter表示抖动程度,仅沿类别轴(通常是 x 轴 )起作用。当很多数据点在类别轴上重叠时,设置 jitter=True 会自动添加一定程度的随机抖动,将重叠的数据点分散开,便于观察每个数据点的分布情况;也可设置具体数值来指定抖动量 。

swarmplot 函数主要参数

  1. xy功能与 stripplot 中一致,x 用于指定类别型变量作为横坐标,y 用于指定数值型变量作为纵坐标 。例如 sns.swarmplot(x="day", y="total_bill", data=tips) 里,通过 x 和 y 确定横纵坐标展示的数据。
  2. hue同样是根据指定的分类变量对数据点进行分组并以不同颜色显示 ,帮助区分不同组数据分布。
  3. data提供绘图的数据集,要求是 pandas 的 DataFrame 形式,从中获取 xyhue 等变量对应的数据 。
  4. order 和 hue_order分别用于指定 x 变量和 hue 变量中类别变量的顺序,作用与在 stripplot 函数中相同 。

总体而言,stripplot 和 swarmplot 都用于绘制类别散点图展示数据分布,stripplot 可通过设置 jitter 处理数据点重叠问题,swarmplot 则通过算法自动避免数据点重叠,更清晰展示数据分布 。后者完全不重叠

案例:这个就是完全重叠了,因为没有设置jitter参数

这个是设置的

 另一个函数

hue的设定

 5.2类内的数据分布(通常显示每个类里数值的分布,所以类为横坐标,数值型变量为纵坐标

5.2.1绘制箱线图

这是箱线图的构造

以下是实现

boxplot 函数参数

  1. xy:指定绘制箱形图的数据输入,x 常为类别型变量,确定箱形图分组;y 为数值型变量,是要展示分布的数据 。如 sns.boxplot(x="day", y="total_bill", data=tips) 中,"day" 划分不同组,"total_bill" 是每组要分析分布的数据。
  2. hue:用于指定一个分类变量,根据该变量不同类别对箱形图进行颜色区分,便于对比不同子组数据 。
  3. data:提供绘图数据的 pandas 的 DataFrame 。函数从其中获取 xyhue 对应数据 。
  4. orient:设置箱形图方向,取值为 'h'(水平 )或 'v'(垂直 ),默认根据数据自动判断 。
  5. color:设置箱形图整体颜色 。
  6. saturation:设置颜色饱和度,以小数表示,控制颜色鲜艳程度 。
  7. palette:用于设置不同级别色相的颜色变量,可传入颜色列表等,指定不同分组的颜色 。

5.2.2小提琴图

violinplot 函数参数

  1. xy:功能与 boxplot 中类似,x 通常是类别型变量用于分组,y 是数值型变量展示分布 。如 sns.violinplot(x="day", y="total_bill", data=tips) 。
  2. hue:根据指定分类变量对小提琴图分组并以不同颜色显示,方便对比不同子组数据分布 。
  3. data:提供绘图数据的 pandas 的 DataFrame ,从中提取 xyhue 相关数据 。

观察不同的参数:

5.3类别内的统计估计(估计就有置信区间了)

 5.3.1条形统计图

 5.3.2折线统计图

相关文章:

  • 【愚公系列】《高效使用DeepSeek》015-文献摘要生成
  • Qt 读取数据库
  • 《FiLM: Visual Reasoning with a General Conditioning Layer》一种通用的视觉推理条件层方法(代码实现)
  • 技术点提升效率详解
  • VBA代码
  • 基于多头注意机制的多尺度特征融合的GCN的序列数据(功率预测、故障诊断)模型及代码详解
  • 算法训练篇01 -- 力扣283.移动零
  • LogicFlow介绍
  • 0基础 | 上下拉电阻典型应用场景
  • Linux安装JDK17
  • SAP DOI EXCEL应用
  • [HelloCTF]PHPinclude-labs超详细WP-Level 5-http协议-2
  • Mysql:关于命名
  • CPP从入门到入土之类和对象Ⅰ
  • LLM中lora的梯度更新策略公式解析
  • 数据恢复软件有哪些?评测哪款最好用
  • 「清华大学、北京大学」DeepSeek 课件PPT专栏
  • jmeter配件元素
  • 网络编程基础(2)
  • 导出的使用
  • 新时代,新方志:2025上海地方志论坛暨理论研讨会举办
  • 气急败坏!20多名台湾艺人被台当局列为“重点核查对象”
  • 篮球培训机构东方启明星被指停摆,家长称已登记未退费用超百万
  • 下周或迎外贸“抢出口”高峰,跨境电商敏感货物如何便利化“登机”?
  • 病愈出院、跳大神消灾也办酒,新华每日电讯:农村滥办酒席何时休
  • 工人日报:应对“职场肥胖”,健康与减重同受关注