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

【Python】数据可视化之分布图

分布图主要用来展示某些现象或数据在地理空间、时间或其他维度上的分布情况。它可以清晰地反映出数据的空间位置、数量、密度等特征,帮助人们更好地理解数据的内在规律和相互关系。

 

目录

单变量分布

变量关系组图

双变量关系

核密度估计

山脊分布图


单变量分布

distplot() 函数是 Seaborn 库中用于绘制单变量分布图的一个非常有用的函数。值得注意的是,从 Seaborn 的较新版本(特别是从0.11.0版本开始)开始,distplot() 函数已经被标记为弃用(deprecated),并建议使用更具体和灵活的绘图函数,如 histplot() 用于直方图,kdeplot() 或 displot()用于更复杂的分布可视化。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set(style="darkgrid")
# 创建一个2行2列的子图,每个子图的大小为8x8,不共享x轴和y轴
f, axes = plt.subplots(2, 2, figsize=(8, 8), sharex=False, sharey=False)
sns.despine(left=True)
# 创建一个随机数生成器,种子为10
rs = np.random.RandomState(8)
# 生成一个包含1000个随机数的数组
d = rs.normal(size=1000)
# 绘制简单的直方图,kde=False不绘制核密度估计图,下列其他图类似
sns.distplot(d, kde=False, color="r", ax=axes[0, 0])
# 使用seaborn库绘制d的分布图,不绘制直方图,绘制rug图,颜色为黄色,绘制在axes[0, 1]上
sns.distplot(d, hist=False, rug=True, color="y", ax=axes[1, 0])
# 使用seaborn库绘制d的分布图,不绘制直方图,颜色为蓝色,kde_kws参数设置阴影为True,绘制在axes[1, 0]上
sns.distplot(d, hist=False, color="b", kde_kws={"shade": True}, ax=axes[0, 1])
# 使用seaborn库中的distplot函数绘制直方图,参数d为数据,color为颜色,ax为坐标轴
sns.distplot(d, color="g", ax=axes[1, 1])
# 设置坐标轴的y轴刻度
plt.setp(axes, yticks=[])
plt.tight_layout()

变量关系组图

pairplot是Seaborn库中的一个强大且多功能的绘图函数,它主要用于绘制数据集中所有可能的成对关系图。这个函数通过生成一个网格图,每个单元格展示一个变量对的分布图(如散点图、直方图或核密度估计图),非常适合于初步的数据探索和可视化。

  • data:指定要绘制的数据集,通常是一个pandas的DataFrame对象。
  • vars:可选参数,用于指定要绘制哪些变量的关系图。如果不指定,则默认绘制数据集中所有数值型变量的关系图。
  • hue:可选参数,用于指定一个分类变量,根据该变量的不同值对数据进行分组展示。
  • kind:控制非对角线上图表类型的参数,可选"scatter"(散点图)和"reg"(回归图)等。但需要注意的是,pairplot的kind参数可能不如其他Seaborn图表那样灵活,因为它主要关注于成对关系的展示。
  • diag_kind:控制对角线上图表类型的参数,可选"hist"(直方图)和"kde"(核密度估计图)等。
  • markers:控制散点图中数据点的标记类型,用于区分不同的数据点或组别。
df = sns.load_dataset("iris")
sns.pairplot(df)

可以控制指定位置的图表类型,比如对角线使用核密度估计图  

sns.pairplot(df, diag_kind="kde")

 也可以对数据进行分组展示

sns.pairplot(iris, hue="species")  

 

双变量关系

双变量关系(Bivariate Relationship)是统计学和数据分析中的一个基本概念,它指的是两个变量之间的关联或相互作用。在这种关系中,一个变量的变化可能会影响到另一个变量的变化,但这并不意味着一个变量是另一个变量的原因。双变量关系可以是线性的,也可以是非线性的,它可以是正相关、负相关,或者根本没有明确的关联,即零相关。

jointplot是Seaborn库中的一个强大工具,用于可视化两个变量的联合分布及其关系。它结合了多种图表类型,如散点图、直方图、核密度估计图(KDE)等,提供了对数据分布和关系的深入理解。jointplot能够同时展示两个变量的联合分布以及它们各自的边缘分布,从而帮助用户全面理解变量之间的关系和分布情况。

  • x, y:指定要绘制的两个变量,分别作为x轴和y轴的数据。
  • data:包含x和y变量的数据集,通常是一个pandas的DataFrame对象。
  • kind:指定绘制图表的类型,如'scatter'(散点图)、'kde'(核密度估计图)、'hex'(蜂窝图)等。
  • color:设置图表中元素的颜色。
  • size:设置图表的大小(正方形)。
  • ratio:设置中心图与侧边图的比例。
  • joint_kws, marginal_kws:分别用于自定义联合图和边缘图的样式。
# 创建一个随机数生成器,种子为8
rs = np.random.RandomState(8)
# 生成1000个服从Gamma分布的随机数
x = rs.gamma(8, size=1000)
# 生成1000个服从正态分布的随机数,并乘以-0.5
y = -.5 * x + rs.normal(size=1000)
# x和y为数据,kind参数指定图形类型为六边形,color参数指定颜色为红色
sns.jointplot(x=x, y=y, kind="hex", color="r")

# 加载tips数据集
tips = sns.load_dataset("tips")
# ,x轴为total_bill,y轴为tip,数据为tips,类型为线性回归,x轴范围为0到50,y轴范围为0到12,颜色为绿色,高度为6
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg",xlim=(0, 50), ylim=(0, 12), color="g", height=6)

 

 

核密度估计

核密度估计(Kernel Density Estimation, KDE)是一种在概率论中用来估计未知的密度函数的非参数检验方法,由Rosenblatt(1955)和Emanuel Parzen(1962)提出,又称为Parzen窗(Parzen window)。核密度估计的基本思想是,对于给定的数据样本,通过核函数(通常是对称且非负的密度函数,如高斯函数)来拟合数据点的局部密度,进而估计整个数据的密度函数。具体来说,对于数据集中的每一个点,都以其为中心放置一个核函数,然后对所有核函数进行加权平均(或求和),得到的结果即为整个数据集的密度估计。

# 设置绘图风格为暗色
sns.set(style="dark")
# 创建一个随机数生成器,种子为8
rs = np.random.RandomState(8)
# 生成随机数的数组
x, y = rs.randn(2, 1000)
# 绘制x和y的核密度估计图
sns.kdeplot(x=x, y=y,color="r")
# 调整布局,使图形更加紧凑
f.tight_layout()

 

# 设置绘图风格为darkgrid
sns.set(style="darkgrid")
# 加载iris数据集
iris = sns.load_dataset("iris")
# 查询出species为setosa的数据
setosa = iris.query("species == 'setosa'")
# 查询出species为virginica的数据
virginica = iris.query("species == 'virginica'")
# 创建一个8x8的绘图区域
f, ax = plt.subplots(figsize=(8, 8))
# 设置绘图区域的纵横比为1:1
ax.set_aspect("equal")
# 绘制setosa数据的密度图,使用Blues颜色映射,并设置阴影和最低值阴影
ax = sns.kdeplot(x=setosa.sepal_width, y=setosa.sepal_length,cmap="Blues", shade=True, shade_lowest=False)
# 绘制virginica数据的密度图,使用Reds颜色映射,并设置阴影和最低值阴影
ax = sns.kdeplot(x=virginica.sepal_width, y=virginica.sepal_length,cmap="Reds", shade=True, shade_lowest=False)
# 获取Reds颜色映射的倒数第二个颜色
red = sns.color_palette("Reds")[-2]
# 获取Blues颜色映射的倒数第二个颜色
blue = sns.color_palette("Blues")[-2]
# 在绘图区域中添加文本,显示species为virginica的数据
ax.text(2.5, 8.2, "virginica", size=16, color=blue)
# 在绘图区域中添加文本,显示species为setosa的数据
ax.text(3.8, 4.5, "setosa", size=16, color=red)

 

山脊分布图

山脊分布图,也称为山脊图(Ridge Plot)或Joy Plot,是一种数据可视化的方法,主要用于展示一个或多个组的数据分布情况。山脊图通过平滑的密度曲线来表示每个组的数据分布,这些曲线沿垂直轴堆叠排列,形成类似山脊的视觉效果。制作基于核密度估计(Kernel Density Estimation, KDE),这是一种估计概率密度函数的非参数方式。通过KDE,可以对每个组的数据进行平滑处理,从而得到连续的密度曲线。

# 创建一个随机数生成器,种子为8
rs = np.random.RandomState(8)
# 生成500个随机数
x = rs.randn(500)
# 创建一个字符串,重复50次
g = np.tile(list("ABCDEFGHIJ"), 50)
# 创建一个DataFrame,包含x和g两列
df = pd.DataFrame(dict(x=x, g=g))
# 将g列中的字符转换为ASCII码
m = df.g.map(ord)
# 将m加到x列上
df["x"] += m
# 创建一个颜色调色板
pal = sns.cubehelix_palette(10, rot=-.5, light=.7)
# 创建一个FacetGrid,按g列进行分面,hue参数设置为g,aspect参数设置为15,height参数设置为0.5,palette参数设置为pal
g = sns.FacetGrid(df, row="g", hue="g", aspect=15, height=.5, palette=pal)
# 在每个分面上绘制核密度图,clip_on参数设置为False,shade参数设置为True,alpha参数设置为1,lw参数设置为1.5,bw参数设置为0.2
g.map(sns.kdeplot, "x", clip_on=False, shade=True, alpha=1, lw=1.5, bw=.2)
# 在每个分面上绘制核密度图,clip_on参数设置为False,color参数设置为白色,lw参数设置为2,bw参数设置为0.2
g.map(sns.kdeplot, "x", clip_on=False, color="w", lw=2, bw=.2)
# 在每个分面上绘制水平线,y参数设置为0,lw参数设置为2,clip_on参数设置为False
g.map(plt.axhline, y=0, lw=2, clip_on=False)
# 定义一个函数,用于在每个分面上添加标签
def label(x, color, label):
    # 获取当前的坐标轴
    ax = plt.gca()
    # 在坐标轴上添加文本,字体加粗,颜色为color,文本内容为label,水平对齐方式为左对齐,垂直对齐方式为居中对齐,坐标轴变换为ax.transAxes
    ax.text(0, .2, label, fontweight="bold", color=color,ha="left", va="center", transform=ax.transAxes)
# 在每个分面上调用label函数
g.map(label, "x")
# 调整子图之间的间距
g.fig.subplots_adjust(hspace=-.5)
# 设置标题为空
g.set_titles("")
# 设置y轴刻度为空
g.set(yticks=[])
# 去掉底部和左边的边框
g.despine(bottom=True, left=True)


http://www.kler.cn/news/317494.html

相关文章:

  • 联影医疗嵌入式面试题及参考答案(3万字长文)
  • wpf,工具栏上,最小化按钮的实现
  • ubuntu 系统下,安装stable diffusion解决下载速度慢的问题
  • (十五)、把自己的镜像推送到 DockerHub
  • 数模方法论-无约束问题求解
  • 科龙睡眠空调小耳朵LF上线,“亲身”答疑空调一天多少度电
  • 【二十五】【QT开发应用】无边窗窗口鼠标拖动窗口移动,重写mousePressEvent,mouseMoveEvent函数
  • 专属文生图助手——SD3+ComfyUI文生图部署步骤
  • 安卓Settings值原理源码剖析存储最大的字符数量是多少?
  • css设置动态数组渲染及中间线平均分开显示
  • IMX6UL开发板中断实验(三)
  • 深度学习02-pytorch-01-张量的创建
  • 使用python-pptx拆分PPT文档:将一个PPT文件拆分成多个小的PPT文件
  • 某yandex图标点选验证码逆向
  • 使用双向 LSTM 和 CRF 进行中文命名实体识别
  • Spring全家桶
  • 图为科技大模型一体机,智领未来社区服务
  • C++中stack类和queue类
  • vue3/Element-Plus/路由的使用
  • Flask-Migrate的使用
  • 学生宿舍管理:Spring Boot技术实现
  • 国内外动态sk5
  • react hooks--useRef
  • 结构设计模式 -装饰器设计模式 - JAVA
  • dockerfile案例
  • unity将多层嵌套的结构体与json字符串相互转化
  • 定制智慧科技展厅方案:哪些细节是成功的秘诀?
  • 基于报位时间判断船舶设备是否在线,基于心跳时间判断基站网络是否在线
  • Android String资源文件中,空格、换行以及特殊字符如何表示
  • 循环遍历把多维数组中的某个值改成需要的值