python画图|并列直方图绘制

news2024/9/23 23:34:51

前述学习过程中,已经知晓普通直方图绘制和堆叠直方图绘制,参考链接如下:

西猫雷婶-CSDN博客

有时候,我们还会遇到并列直方图绘制的需求,今天就探索一下。

【1】官网教程

按照惯例,我们先来到官网:

https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html#sphx-glr-gallery-lines-bars-and-markers-barchart-py 

图1

找到grouped bar chart with labels后。直奔示例。

然后进入学习模式。

【2】代码解读

官网代码前两行依旧岿然不动,引入计算模块numpy用于数值运算,画图模块matplotlib用于绘图。

# data from https://allisonhorst.github.io/palmerpenguins/

import matplotlib.pyplot as plt   
import numpy as np

然后定义了类别和对应的数据:

species = ("Adelie", "Chinstrap", "Gentoo") #类别,3种
penguin_means = {                           #这里实际上给给每种类别定义了3个数据
    'Bill Depth': (18.35, 18.43, 14.98),
    'Bill Length': (38.79, 48.83, 47.50),
    'Flipper Length': (189.95, 195.82, 217.19),
}

之后定义了要画图,使用ax控制坐标轴属性:

x = np.arange(len(species))  # the label locations,按照顺序排列species
width = 0.25  # the width of the bars #直方图方块宽度
multiplier = 0 #定义乘法因子
fig, ax = plt.subplots(layout='constrained') #定义一个带坐标轴的图,坐标轴属性用ax控制

之后开始画直方图,用for循环实现方块输出,调整multiplier实现方块位移:

for attribute, measurement in penguin_means.items(): #for函数用于遍历penguin_means内部数组
    offset = width * multiplier #直方图间距偏移量定义
    rects = ax.bar(x + offset, measurement, width, label=attribute)
    #画直方图,x+offset代表(类别的位置+偏移量),偏移之后才能并列放置,都则就会重叠;
    # measurement指将penguin_means中的数据按顺序赋值给x+offset对应的类别;
    # width为方块宽度
    # label就是将penguin_means中的数据类别作为标签
    ax.bar_label(rects, padding=3) #输出标签,padding指和方块顶部的距离,一个三个类别,所以设定值为3
    multiplier += 1 #乘法因子扩大,带来每个类别内部方块的移动

最后设置坐标轴属性,输出图形:

# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel('Length (mm)') #设定Y轴标签
ax.set_title('Penguin attributes by species') #设定图名
ax.set_xticks(x + width, species) #设定x轴,允许放多个类别
ax.legend(loc='upper left', ncols=3) #设定图例,位置为左上upper left,图例的颜色数量是ncols=3
ax.set_ylim(0, 250) #设定y轴范围是(0,250)

plt.show() #输出图形

ax.set_xticks允许一个类别多个数据,这是并列直方图出现的直接推手。

图2

【3】代码改写-修改padding

尝试把padding从3改为50后,各类被数据都往上漂移了:

图3

【4】代码改写-修改multiplier

multiplier控制各方块的间隙,尝试把multiplier在for循环中的增量减小到0.5:

multiplier += 0.5 #乘法因子扩大,带来每个类别内部方块的移动

图4

由图4可见,方块大小不再一致。

实际上这是因为:新的方块只移动了一半(multiplier=1),所以被旧方块盖住了,最佳的移动还是要按照multiplier=1,让整个方块都显示出来,这样才会让图片更好看

【5】代码改写-修改penguin_means和ncols

要想把并列方块数量增多,因修改penguin_means中的一维数组列数,每一列方块要使用不同的颜色区分,所以ncols也要跟随变化。某一类别下有几个并列方块,就有几种颜色。

改后:

penguin_means = {#这里实际上给每种类别定义了3个数据,现在增加了3行,一共6行
    'Bill Depth': (18.35, 18.43, 14.98),
    'Bill Length': (38.79, 48.83, 47.50),
    'Flipper Length': (189.95, 195.82, 217.19),
    'add Bill Depth': (18.35, 18.43, 14.98),
    'add Bill Length': (38.79, 48.83, 47.50),
    'add Flipper Length': (189.95, 195.82, 217.19),
}
ax.legend(loc='upper left', ncols=6) #设定图例,位置为左上upper left,图例的颜色数量由ncols=3更新为ncols=6

运行后:

图5

我们很难过的发现所有方块挤在了一起,所以我们要去需改方块宽度:由0.25改为0.1

x = np.arange(len(species))  # the label locations,按照顺序排列species
width = 0.1  # the width of the bars 直方图方块宽度
multiplier = 0 #定义乘法因子

运行后:

图6

可见,图形没有挤在一起,出现了6个颜色图例。

本次改写完整代码如下:

# data from https://allisonhorst.github.io/palmerpenguins/

import matplotlib.pyplot as plt
import numpy as np

species = ("Adelie", "Chinstrap", "Gentoo")#类别,3种
penguin_means = {#这里实际上给每种类别定义了3个数据
    'Bill Depth': (18.35, 18.43, 14.98),
    'Bill Length': (38.79, 48.83, 47.50),
    'Flipper Length': (189.95, 195.82, 217.19),
    'add Bill Depth': (18.35, 18.43, 14.98),
    'add Bill Length': (38.79, 48.83, 47.50),
    'add Flipper Length': (189.95, 195.82, 217.19),
}

x = np.arange(len(species))  # the label locations,按照顺序排列species
width = 0.1  # the width of the bars 直方图方块宽度
multiplier = 0 #定义乘法因子

fig, ax = plt.subplots(layout='constrained')#定义一个带坐标轴的图,坐标轴属性用ax控制

for attribute, measurement in penguin_means.items():#for函数用于遍历penguin_means内部数组
    offset = width * multiplier #直方图间距偏移量定义
    rects = ax.bar(x + offset, measurement, width, label=attribute)
    # 画直方图,x+offset代表(类别的位置+偏移量),偏移之后才能并列放置,都则就会重叠;
    # measurement指将penguin_means中的数据按顺序赋值给x+offset对应的类别;
    # width为方块宽度
    # label就是将penguin_means中的数据类别作为标签
    ax.bar_label(rects, padding=3) #输出标签,padding指和方块顶部的距离,一个三个类别,所以设定值为3
    multiplier += 1 #乘法因子扩大,带来每个类别内部方块的移动

# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel('Length (mm)') #设定Y轴标签
ax.set_title('Penguin attributes by species') #设定图名
ax.set_xticks(x + width, species) #设定x轴,允许放多个类别
ax.legend(loc='upper left', ncols=6) #设定图例,位置为左上upper left,图例的颜色数量是ncols=3
ax.set_ylim(0, 250) #设定y轴范围是(0,250)

plt.show() #输出图形

【6】总结

本次学习探讨了并列直方图的for循环画法,并学会了修改各类别标签的位置、各类别方块的移动和多个方块的设定。

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

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

相关文章

vue3有了解过吗?和vue2的区别

vue3介绍 🍕🍕🍕关于vue3的重构背景,作者是这样说的: 「Vue 新版本的理念成型于 2018 年末,当时 Vue 2 的代码库已经有两岁半了。比起通用软件的生命周期来这好像也没那么久,但在这段时期&…

资源第一篇 =》bundle包

简介 bundle包主要用于游戏资源的模块化功能,以便更好的管理游戏资源、优化游戏资源的加载、优化游戏包体的大小,提高游戏体验。我们可以根据实际的场景,把游戏资源进行合理的分包。 bundle类型 cocos包分为内置bundle和自定义bundle。 内…

七、装饰器模式

装饰器模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象自身的情况下,动态地向对象添加新功能。它通过将功能附加到对象的方式来增强其行为,提供了一种灵活的替代方案来使用子类扩展功能。 主要组成部分…

python 检测端口是否开放

python的socket库可以检测端口是否开放。 import socket; sock socket.socket(socket.AF_INET, socket.SOCK_STREAM) result sock.connect_ex((127.0.0.1,80)) if result 0:print "Port is open" else:print "Port is not open" 这里sock.connect_ex()方…

机器人领域顶刊TRO最受欢迎的TOP 50文章盘点

介绍 众所周知,TRO是机器人领域的绝对顶刊,每一篇文章都是质量极高的。最近在看TRO官网的时候,发现官网给出了在TRO发布文章中最收欢迎的TOP 50 paper list。下面来看看都有哪些文章?是不是和您想的一样?下面文章的顺…

Ollama—87.4k star 的开源大模型服务框架!!

这一年来,AI 发展的越来越快,大模型使用的门槛也越来越低,每个人都可以在自己的本地运行大模型。今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Ollama 是一个开源的大语言模型(LLM)服务工具…

【redis】认识redis和分布式系统

文章目录 认识 redisredis 的主要功能实现数据库实现缓存实现消息中间件 分布式系统单机架构为什么数据多了主机就难以应对 ?分布式系统 认识 redis redis 的主要功能 用来在内存中存储数据 定义变量不就是在内存中存储数据吗?为什么还需要 redis 来向…

如何看待AI技术对人们生活的影响?

人工智能(AI)技术对人们生活的影响是多方面的,既有积极的一面,也存在一些需要关注的问题。以下是对AI技术在生活中影响的综合看法: 积极影响: 提高效率:AI技术在各行各业中的应用大大提高了工作…

14,子查询语句嵌套

1.1 查询研发部门的所有员工信息 #步骤1: 查询研发部门的 did SELECT did FROM t_department WHERE dname 研发部; #步骤2: 嵌套子查询,查询员工信息 SELECT * FROM t_employee WHERE did (SELECT did FROM t_department WHERE dname 研发部); 1.1 查询和白露性别和部门相…

Splashtop 在 Gartner Peer Insights™ 远程桌面软件客户之声评选中荣获“卓越表现者”称号

2024年9月4日 加利福尼亚州库比蒂诺 远程解决方案提供商 Splashtop 今天宣布,在最新发布的《2024年 Gartner Peer Insights™ 远程桌面软件客户之声》报告中,Splashtop 荣获“卓越表现者”称号。进入“卓越表现者”象限,意味着 Splashtop 的…

基于 Python 的 LIF 模型:探索神经元同步与小世界网络

在神经科学中,理解神经元之间的同步行为对解释大脑的功能非常重要。而泄漏积分发放(Leaky Integrate-and-Fire, LIF)模型作为一种经典的神经元模型,广泛应用于模拟神经元的膜电位变化以及脉冲发放。本篇博客将带你通过Python代码&…

大眼橙X7D Ultra和当贝D6X Pro选哪个好?三千价位,谁的性价比更高

在投影仪市场的激烈竞争中,3000多价位一款新产品问世,大眼橙X7D Ultra作为新款备受瞩目,与其对应的同价位佼佼者当贝D6X Pro都各自以其独特的优势吸引着消费者的目光。今天就来说说这款新品大眼橙X7D Ultra对比当贝D6X Pro有哪些不同之处&…

iOS 18beta/正式版升级办法分享

随着科技的飞速发展,苹果公司每一次的iOS系统更新都为我们带来了前所未有的便捷与惊喜。如今,iOS 18的发布再次激起了广大iPhone用户的升级热情。为了让大家能够顺利、高效地升级到这一全新系统,今天我将为大家分享几种实用的升级iOS 18的方法…

展会回顾 | SunTorque智能扭矩系统亮相GAF2024展览会,收获满满

9月,一个收获的季节, GAF 2024全球紧固—连接—装配技术大会暨展览会就在这样一个美好的季节中,在苏州花桥国际博览中心完美落幕。这场汇聚了全球顶尖技术与创新理念的盛会,不仅吸引了来自全国各地的制造商、科技巨头及行业精英&a…

电脑桌面整理怎么弄?分享8款桌面整理软件,轻松拿捏桌面美化!

电脑桌面是我们日常工作和学习中最常接触到的地方,但随着时间的推移,桌面上往往会堆积越来越多的文件和图标。这不仅让桌面看起来杂乱无章,也使得寻找特定文件变得困难,从而影响了工作和学习的效率。那么,如何有效整理…

Embedding模型提升效果的方法之二:SimCSE

0. 前言 SimCSE是通过对比学习的方式缓解预训练模型的各向异性问题,各向异性的产生原因在上一篇文章中已有介绍。SimCSE是2021年出的,后面出的 embedding 模型几乎都使用了对比学习来缓解预训练语言模型的各向异性问题。前面介绍的几篇文章无一例外使用…

1-2宿主环境

什么是宿主环境 指的是程序运行所必须的依赖环境。Android系统和ios系统是两个不同的宿主环境,安卓版的app是不能在ios系统上运行的。 小程序的宿主环境 🍕🍕🍕 -手机微信是小程序的宿主环境 通信的主体 🍔&…

使用百度飞桨PaddleOCR进行OCR识别

1、代码及文档 代码:https://github.com/PaddlePaddle/PaddleOCR?tabreadme-ov-file 介绍文档:https://paddlepaddle.github.io/PaddleOCR/ppocr/overview.html 2、依赖安装 在使用过程中需要安装库,可以依据代码运行过程中的提示安装。…

高效实用的网站ICP备案查询接口

随着互联网的日益发展,对于网站的监管变得越来越重要。为了更好地管理和监督互联网上的网站,官方要求所有在中国境内的网站都需要进行ICP备案。因此,ICP备案不仅是法律要求,也是衡量一个网站是否正规的重要标志之一。为了便于开发…

开题报告撰写的四大难点与应对策略

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 对于每个即将进入毕业论文阶段的学生来说,开题报告是一道必经的门槛。开题报告不仅决定了你的论文方向,还对后续的研究和写作起到重要的引导作用。 然而,许多学生在撰写…