【Matplotlib作图-4.Distribution】50 Matplotlib Visualizations, Python实现,源码可复现

目录

  • 04Distribution
    • 4.0 Prerequisite
    • 4.1 连续变量的直方图(Histogram for Continuous Variable)
    • 4.2 分类变量的直方图(Histogram for Categorical Variable)
    • 4.3 Density Plot
    • 4.4 Density Curves with Histogram
    • 4.5 Joy Plot
    • 4.6 Distributed Dot Plot
    • 4.7 Box Plot
    • 4.8 Dot + Box Plot
    • 4.9 Violin Plot
    • 4.10 Population Pyramid
    • 4.11 Categorical Plots
  • References

04Distribution


4.0 Prerequisite

  • Setup.py
# !pip install brewer2mpl
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings; warnings.filterwarnings(action='once')

large = 22; med = 16; small = 12
params = {'axes.titlesize': large,
          'legend.fontsize': med,
          'figure.figsize': (16, 10),
          'axes.labelsize': med,
          'axes.titlesize': med,
          'xtick.labelsize': med,
          'ytick.labelsize': med,
          'figure.titlesize': large}
plt.rcParams.update(params)
# plt.style.use('seaborn-whitegrid')
plt.style.use("seaborn-v0_8")
sns.set_style("white")
# %matplotlib inline

# Version
print(mpl.__version__)  #> 3.7.1
print(sns.__version__)  #> 0.12.2

4.1 连续变量的直方图(Histogram for Continuous Variable)

  • Histogram shows the frequency distribution of a given variable. The below representation groups the frequency bars based on a categorical variable giving a greater insight about the continuous variable and the categorical variable in tandem. Create histogram and learn how to interpret them in this free video tutorial.
    直方图显示了给定变量的频率分布。下面的表示根据一个分类变量对频率条进行分组,从而更好地理解连续变量和分类变量之间的关系。
    直方图是一种可视化工具,用于展示连续变量的频率分布情况。它将连续变量的取值范围划分为若干个等宽的区间(也称为箱子或区间),然后统计每个区间内的观测值数量或频率。
    在上述描述中,提到了一个额外的因素,即基于一个分类变量对频率条进行分组。这意味着可以使用某个分类变量来将观测值分组,然后在每个组内绘制直方图。这种绘制方式可以提供更多关于连续变量和分类变量之间关系的见解。
    通过创建直方图,我们可以直观地了解连续变量的分布情况。直方图的横轴表示连续变量的取值范围,纵轴表示频率或观测值数量。直方图的柱状条表示每个区间内的观测值数量或频率,柱状条的高度越高,表示该区间内的观测值越多。
    通过观察直方图,我们可以得到以下信息:
    1)连续变量的整体分布形状:直方图的整体形状可以告诉我们连续变量的分布情况,例如是否呈现正态分布、偏态分布或双峰分布等。
    2)连续变量的中心位置:直方图的峰值所在的区间可以提供连续变量的中心位置信息。
    3)连续变量的范围和离散程度:直方图的横轴范围和柱状条的高度可以帮助我们了解连续变量的取值范围和离散程度。
    通过将直方图与分类变量结合使用,我们可以更好地理解连续变量和分类变量之间的关系。这种组合可以揭示在不同分类变量水平下连续变量的分布差异,帮助我们发现潜在的模式或趋势。

  • mpg_ggplot2.csv 展示不同汽车制造商的城市燃油效率(每加仑行驶的英里数):

"manufacturer","model","displ","year","cyl","trans","drv","cty","hwy","fl","class"
"audi","a4",1.8,1999,4,"auto(l5)","f",18,29,"p","compact"
"audi","a4",1.8,1999,4,"manual(m5)","f",21,29,"p","compact"
"audi","a4",2,2008,4,"manual(m6)","f",20,31,"p","compact"
"audi","a4",2,2008,4,"auto(av)","f",21,30,"p","compact"
"audi","a4",2.8,1999,6,"auto(l5)","f",16,26,"p","compact"
"chevrolet","c1500 suburban 2wd",5.3,2008,8,"auto(l4)","r",14,20,"r","suv"
"chevrolet","c1500 suburban 2wd",5.3,2008,8,"auto(l4)","r",11,15,"e","suv"
"chevrolet","c1500 suburban 2wd",5.3,2008,8,"auto(l4)","r",14,20,"r","suv"
"chevrolet","c1500 suburban 2wd",5.7,1999,8,"auto(l4)","r",13,17,"r","suv"
  • 程序代码为:
# 目的是根据车辆类型(class)对发动机排量(displ)进行堆叠直方图的可视化。每个直方图的颜色表示不同的车辆类型,柱子的高度表示频数(数量)。
# Import Data
# 使用pd.read_csv函数从指定的URL读取CSV文件,并将其存储在名为df的DataFrame中:
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")

# Prepare data
# 选择两个变量,x_var表示横轴变量为'displ'(发动机排量),groupby_var表示按照'class'(车辆类型)进行分组。代码通过对数据进行分组并提取特定变量的方式,得到每个分组的值。
x_var = 'displ'
groupby_var = 'class'
# 对DataFrame进行索引,只选择x_var和groupby_var两列的数据,并使用groupby函数按groupby_var进行分组:
df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var)
# 使用列表推导式遍历每个分组,并将每个分组的x_var值存储在名为vals的列表中:
vals = [df[x_var].values.tolist() for i, df in df_agg]

# Draw
plt.figure(figsize=(16,9), dpi= 80)
# 定义颜色列表,用于为每个分组设置不同的颜色。这里使用了plt.cm.Spectral颜色映射函数。
colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))]
# 使用plt.hist函数绘制堆叠直方图。vals是一个包含每个分组值的列表,30表示直方图的柱子数量,stacked=True表示堆叠显示直方图,density=False表示纵轴为频数。函数返回直方图的计数值、柱子边界和绘制的图形对象:
n, bins, patches = plt.hist(vals, 30, stacked=True, density=False, color=colors[:len(vals)])

# Decoration
# 添加图形装饰。使用plt.legend函数添加图例,将每个分组对应的颜色与分组名称关联起来。设置标题、横轴名称、纵轴名称、纵轴范围和横轴刻度。
plt.legend({group:col for group, col in zip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])})
plt.title(f"Stacked Histogram of ${x_var}$ colored by ${groupby_var}$", fontsize=22)
plt.xlabel(x_var)
plt.ylabel("Frequency")
plt.ylim(0, 25)
plt.xticks(ticks=bins[::3], labels=[round(b,1) for b in bins[::3]])
plt.show()
  • 运行结果为:

4.2 分类变量的直方图(Histogram for Categorical Variable)

  • The histogram of a categorical variable shows the frequency distribution of a that variable. By coloring the bars, you can visualize the distribution in connection with another categorical variable representing the colors.
    分类变量的直方图显示了该变量的频率分布。通过对柱子进行着色,可以将其与表示颜色的另一个分类变量的分布进行可视化。

  • 程序代码为:

# Import Data
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")

# Prepare data
# x_var被设置为字符串'manufacturer',表示在x轴上要显示的变量是制造商。groupby_var被设置为字符串'class',表示要根据类别进行分组。
x_var = 'manufacturer'
groupby_var = 'class'
# 使用df.loc函数选择df中的x_var和groupby_var列,并使用groupby方法按groupby_var分组。这将创建一个分组后的DataFrame对象df_agg。
df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var)
# 使用列表推导式生成一个名为vals的列表。在每次迭代中,从df_agg中获取分组后的DataFrame,并提取x_var列的值并转换为列表。这将为每个类别创建一个列表,其中包含该类别下的所有制造商。
vals = [df[x_var].values.tolist() for i, df in df_agg]

# Draw
plt.figure(figsize=(16,9), dpi= 80)
# 生成一组颜色,用于堆叠直方图的每个类别。这里使用plt.cm.Spectral函数生成颜色,通过将i除以len(vals)-1来控制颜色的渐变。
colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))]
# 使用plt.hist函数绘制堆叠直方图。其中,vals是要绘制的值的列表,df[x_var].unique().__len__()表示x轴上的条形数,即不同制造商的数量。stacked=True表示堆叠直方图,density=False表示显示的是频数而不是密度。color=colors[:len(vals)]表示使用之前生成的颜色列表。
n, bins, patches = plt.hist(vals, df[x_var].unique().__len__(), stacked=True, density=False, color=colors[:len(vals)])

# Decoration
# 使用plt.legend函数添加图例。通过使用字典推导式,将每个类别和其对应的颜色进行映射。
plt.legend({group:col for group, col in zip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])})
# 使用plt.title函数设置图形标题,其中包括变量名和分组变量名。使用plt.xlabel和plt.ylabel函数分别设置x轴和y轴的标签。使用plt.ylim函数设置y轴的取值范围。使用plt.xticks函数设置x轴刻度的位置和标签,并进行一些旋转和对齐操作。
plt.title(f"Stacked Histogram of ${x_var}$ colored by ${groupby_var}$", fontsize=22)
plt.xlabel(x_var)
plt.ylabel("Frequency")
plt.ylim(0, 40)
# plt.xticks(ticks=bins, labels=np.unique(df[x_var]).tolist(), rotation=90, horizontalalignment='left')
plt.xticks(rotation=90, horizontalalignment='left')
plt.show()
  • 运行结果为:

4.3 Density Plot

4.4 Density Curves with Histogram

4.5 Joy Plot

4.6 Distributed Dot Plot

4.7 Box Plot

4.8 Dot + Box Plot

4.9 Violin Plot

4.10 Population Pyramid

4.11 Categorical Plots






References


  • Top 50 matplotlib Visualizations
  • 【Matplotlib作图-1.Correlation】50 Matplotlib Visualizations, Python实现,源码可复现
  • 【Matplotlib作图-2.Deviation】50 Matplotlib Visualizations, Python实现,源码可复现
  • 【Matplotlib作图-3.Ranking】50 Matplotlib Visualizations, Python实现,源码可复现


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676830.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端 video 实现全屏播放

只需要加上这句代码就行 controls <videoid"myVideo":src"detailDate.linkAddress":poster"detailDate.pictureUrl"enable-danmucontrolswebkit-playsinline"true"></video>

绘画参数配置及使用

绘画参数配置及使用 路径&#xff1a;站点后台-功能-AI绘画 进入参数配置 接口选择&#xff1a;多种接口自主选择&#xff08;需自己准备key&#xff09;&#xff0c;对应接口的key对话和绘画通用 存储空间&#xff1a; 位置在超管后台-存储空间 自主选择存储&#xff08;需…

【STL源码剖析】deque 的使用

别院深深夏席清&#xff0c;石榴开遍透帘明。 树阴满地日当午&#xff0c;梦觉流莺时一声。 目录 deque 的结构 deque 的迭代器剖析 deque 的使用 ​编辑 deque 的初始化 deque 的容量操作 deque 的访问操作 在 pos 位置插入另一个向量的 [forst&#xff0c;last] 间的数据​编…

JVMの堆、栈内存存储

1、JVM栈的数据存储 通过前面的学习&#xff0c;我们知道&#xff0c;将源代码编译成字节码文件后&#xff0c;JVM会对其中的字节码指令解释执行&#xff0c;在解释执行的过程中&#xff0c;又利用到了栈区的操作数栈和局部变量表两部分。 而局部变量表又分为一个个的槽位&…

web安全基础学习笔记

这里写目录标题 1.使用hackbar2.php漏洞基本分析 弱类型语言2.2 php漏洞找到隐藏的源代码之 index.php~2.3 php漏洞找到隐藏的源代码之 vim的临时文件 /.index.php.swp3.php漏洞基本分析 数组 3.php漏洞基本分析 extract4.php漏洞基本分析 strpos eregi函数漏洞4.php漏洞基本分…

Java web应用性能分析之【java进程问题分析定位】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 Java web应用性能分析之【jvisualvm远程连接云服务器】-CSDN博客 由于篇幅限制、前面三篇讲了准备工作和分析小结&#xff0c;这里将详细操作java进程问题…

The First项目报告:去中心化知识产权治理协议MON Protocol如何革新链游产业?

2023年12月&#xff0c;RPG NFT 游戏 Pixelmon 首席执行官 GiulioX 在 X 平台表示&#xff0c;确认将推出代币 MON&#xff0c;代币生成&#xff08;TGE&#xff09;时间将取决于 MON 的路线图和主流 CEX 的启动板队列。12 月 11 日&#xff0c;RPG NFT 游戏 Pixelmon 首席执行…

防爆AGV叉车在现代物流行业的应用

AGV 随着机器人技术在中国的快速发展&#xff0c;国内企业开始推出区别于传统叉车的叉车AGV&#xff0c;旨在为企业降本增效&#xff0c;降低人工成本与对人的依赖&#xff1b;同时&#xff0c;也将人工从危险恶劣的环境中解放出来。随着技术的持续提升&#xff0c;叉车AGV已经…

API低代码平台介绍4-数据库记录插入功能

数据库记录插入功能 本篇文章我们将介绍如何使用ADI平台定义一个向目标数据库插入记录的接口&#xff0c;包括手工组装报文单表插入、手工组装报文多表插入、自动组装报文多表插入三种方式。无论是单表插入还是多表插入&#xff0c;任何一条记录写入失败&#xff0c;那么默认情…

kvm学习 - 迅速上手示例

目录 kvmtool kvmsample kvmtool GitHub - kvmtool/kvmtool: Stand-alone Native Linux KVM Tool repoStand-alone Native Linux KVM Tool repo. Contribute to kvmtool/kvmtool development by creating an account on GitHub.https://github.com/kvmtool/kvmtool.git cd …

17.Redis之主从复制

1.主从复制是怎么回事&#xff1f; 分布式系统, 涉及到一个非常关键的问题: 单点问题 单点问题&#xff1a;如果某个服务器程序, 只有一个节点(只搞一个物理服务器, 来部署这个服务器程序) 1.可用性问题,如果这个机器挂了,意味着服务就中断了~ 2.性能/支持的并发量也是比较有限…

C语言学习:数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址&#xff08;类似门牌号&#xff09; • CPU通过 地址 来访问这个字节的空间 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

【UML用户指南】-06-面向对象建模-关系(relationship)

目录 1、面向对象建模常见的关系 2、关系的组成元素 3、依赖关系 4、泛化关系 5、关联关系 关联的四种修饰 1.名称 2.角色 3.多重性 4.聚合 6、常用建模技术 6.1、对简单依赖建模 6.2、对单继承建模 6.3、对结构关系建模 1、面向对象建模常见的关系 依赖 &#x…

flask轻松入门,概念讲解

Hello World Flask 是轻量级web框架&#xff0c;仅保留了核心功能&#xff1a; 请求响应处理模板渲染URL路由 文章目录 Hello Worldflask命令模式python命令模式两种模式对比修改入口文件配置flask命令修改python命令修改 修改端口和地址flask命令修改python命令修改 修改 URL …

jupyter之plt 画图弹出窗口展示图片以及静态图片切换方法

1. jupyter出图的三种方式 在python的Jupyter Notebook中&#xff0c;使用matplotlib绘制动态图形时&#xff0c;可能出现只显示一张静态图像。 这是因为在notebook中使用plt绘图共有三种模式&#xff1a; %matplotlib inline&#xff1a;这是默认的模式&#xff0c;输出的图片…

JavaScript 基础 - 对象

对象 对象是一种无序的数据集合&#xff0c;可以详细的描述描述某个事物。 注意数组是有序的数据集合。它由属性和方法两部分构成。 语法 声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。 <script>let 对象名 {属性名&#xff1a;属性值…

【OPENMV】学习记录 (持续更新)

一、图像 1 设置彩色&#xff0f;黑白&#xff1a; sensor.set_pixformat() 设置像素模式。 sensor.GRAYSCALE: 灰度&#xff0c;每个像素8bit。sensor.RGB565: 彩色&#xff0c;每个像素16bit。 2 设置图像大小&#xff1a; sensor.set_framesize() 设置图像的大小 sensor.…

前端优化之图片压缩——tinyPNG

今天前端前辈新介绍的一个压缩图片的工具——tinyPNG&#xff0c;地址&#xff1a;TinyPNG – Compress WebP, PNG and JPEG images intelligently可以将图片压缩&#xff0c;进行优化。 一、使用方法——手动压缩 将超过200kb的图片拖到我标注的红框框里&#xff0c;拖到这里…

如何快速定位到影响mysql cpu飙升的原因——筑梦之路

通常我们只需要执行show processlist 进行查看&#xff0c;一般执行时间最长的SQL八九不离十就是罪魁祸首&#xff0c;但当show processlist的输出有近千条&#xff0c;那么很难第一眼就发现有问题的SQL&#xff0c;那么如何快速找到呢&#xff1f;其实也非常简单。我们知道mys…

多卡聚合智能融合通信设备在无人机无线视频传输应用

无人驾驶飞机简称“无人机”&#xff0c;是利用(无线电)遥控设备和自备的程序控制装置操纵的不载人飞行器&#xff0c;现今无人机在航拍、农业、快递运输、测绘、新闻报道多个领域中都有深度的应用。 无人机无线视频传输保证地面人员利用承载的高灵敏度照相机可以进行不间断的画…