【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.transAxesax.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.xdnf.cn/news/149353.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌网站收录查询,怎么查看网站在谷歌的收录情况

在进行谷歌网站收录查询时,我们需采取一种既专业又系统的方法,以确保能够准确评估网站在谷歌搜索引擎中的可见性和收录状态。这一过程不仅关乎技术细节,还涉及到对搜索引擎优化(SEO)策略的理解与应用。以下是一个基于专…

MobaXterm基本使用 -- 服务器状态、批量操作、显示/切换中文字体、修复zsh按键失灵

监控服务器资源 参考网址:https://www.cnblogs.com/144823836yj/p/12126314.html 显示效果 MobaXterm提供有这项功能,在会话窗口底部,显示服务器资源使用情况 如内存、CPU、网速、磁盘使用等: (完整窗口&#xff0…

QT| “无法粘贴窗口部件”错误以及customplot

“无法粘贴窗口部件”错误以及customplot “无法粘贴窗口部件”错误customplot下载添加到项目中使用QCustomPlot常用的代码 “无法粘贴窗口部件”错误 情景:使用QT设计界面,很多部分比较类似,可以复制另一个界面的ui,但是粘粘的时…

力扣 中等 1901.寻找峰值II

文章目录 题目介绍题解 题目介绍 题解 需要明白一个事实:从任意一个点出发,可以经过一个递增路径,找到一个极大值点。 求出一行的最大值,如果这行最大值比上面的要小,那峰值(之一)就会在上面 …

React-Native 中使用 react-native-image-crop-picker 在华为手机上不能正常使用拍照功能

背景: React-Native 0.66 中使用 react-native-image-crop-picker 在安卓 华为手机上不能正常使用拍照功能, 其他品牌正常 代码如下: import ImagePicker from react-native-image-crop-picker;ImagePicker.openCamera(photoOptions).then(image > {callback(image);}) …

如何释放并重新获得ip地址呢?

如何释放并重新获得ip地址呢? 释放并重新获得一个IP地址的具体步骤如下: 1、要想从DHCP服务器重新获取ip,电脑必须设置成"自动获取ip",设置如下,在电脑桌面"网络"-属性-更改适配器设置为自动获取ip。 2、然…

在CentOS 6上安装Squid代理的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 Status: 已弃用 本文涵盖的 CentOS 版本已不再受支持。如果您目前正在运行 CentOS 6 服务器,我们强烈建议升级或迁移到受支持…

【威领,德新,中达安】9.23复盘

威领这次的底部是4个月 所以这种跳空高开,远离5日均线的,如果不是近期的利好板块,那么第二天可能要回调5日均线。所以按照我的收益准则,吃一个板可以出一半了。 到顶部十字剩下一半也出掉了。 如果做长期,我依旧认为威…

CSS03-CSS的引入方式

一、CSS的三种样式表 1-1、内部样式表 示例: 1-2、行内样式表 1-3、外部样式表 1-4、小结

在Windows系统上安装的 Arrow C++ 库

在Windows系统上安装的 Arrow C 库 正文第一步第二步第三步第四步注: 检查是否安装成功 吐槽 正文 第一步 git clone gitgithub.com:apache/arrow.git第二步 打开powershell (好像cmd也可以,不过我试了powershell中不报错,cmd中报错,不是很清楚为什么) 打开arrow的目录 cd …

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…

C++读取txt文件中的句子在终端显示,同时操控鼠标滚轮(涉及:多线程,产生随机数,文件操作等)

文章目录 运行效果功能描述代码mian.cppincludeMouseKeyControl.hTipsManagement.h srcMouseControl.cppTipsManagement.cpp 运行效果 功能描述 线程一:每隔n随机秒,动一下鼠标滚轮,防止屏幕息屏。 线程二:运行时加载txt文件中的…

【RocketMQ入门】

RocketMQ入门 RocketMQ是阿里巴巴开源的分布式消息中间件,现在是Apache的一个顶级项目。在阿里内部使用非常 广泛,已经经过了"双11"这种万亿级的消息流转。 RocketMQ环境搭建 接下来我们先在linux平台下安装一个RocketMQ的服务 环境准备 …

C++ Mean Shift算法

原理 每个样本点最终会移动到核概率密度的峰值&#xff0c;移动到相同峰值的样本点属于同一种颜色 关键代码 template <typename PointType> inline typename MeanShift<PointType>::PointsVector MeanShift<PointType>::meanshift(const PointsVector &am…

解决ArmDS Fast Models 中部分内核无法上电的问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决ArmDS Fast Models 中部分内核无法上电的问题。 2、 问题场景 在调用ArmDS的Fast Models中的Cortex-A55的模型&#xff0c;只有Core 0是上电状态&#xff0c;而Core 1处于掉电状态&#xff0c;如图2-1所示&…

Ubuntu 24.04.1 LTS 安装 node 16.20.2环境

目录 step1&#xff1a;确认版本 step2&#xff1a;选择方式 step3&#xff1a;二进制文件安装 step1&#xff1a;确认版本 不同的版本情况可能有稍许不同&#xff0c;尽可能环境安装前版本保持一致&#xff1b; lsb_release -a 或者 cat /etc/os-release 可以查看版本信…

jmeter本身常用性能优化方法

第一种设置&#xff1a; 修改Jmeter.bat文件&#xff0c;调整JVM参数(修改jmeter本身的最小最大堆内存)&#xff0c;默认都是1个G set HEAP-Xms5g -Xmx5g -XX:MaxMetaspaceSize256m我的本机内存是8G&#xff0c;那最大可以设置870%(本机内存的70%)5.6g 这里我设置的5g 如果…

Golang | Leetcode Golang题解之第题432题全O(1)的数据结构

题目&#xff1a; 题解&#xff1a; type node struct {keys map[string]struct{}count int }type AllOne struct {*list.Listnodes map[string]*list.Element }func Constructor() AllOne {return AllOne{list.New(), map[string]*list.Element{}} }func (l *AllOne) Inc(ke…

链表分割-----------lg

现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 我们可以假设x为36&#xff0c;则小于36都排在前边&#xff0c;>3…

html+css(交河故城css)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>故城</title><link rel"stylesheet&q…