【数据处理】Python matplotlib绘制双柱状图以及绘制堆积柱状图——保姆级教程

news2025/7/8 14:43:47

Python matplotlib绘制双柱状图以及绘制堆积柱状图

  • 双柱状图
    • 一、双柱状图的原理
    • 二、双柱状图的完善
      • 1. 增加图片标题
      • 2. 增加x轴y轴标题
      • 3. 增加x轴注释
    • 四、完整代码
  • 堆积柱状图
    • 一、堆积柱状图的绘制原理
    • 二、plt.bar参数介绍
    • 三、完整代码:

双柱状图

一、双柱状图的原理

绘制双柱状图的原理用最朴素的话来讲就是:

先绘制第一个系列的柱体(如先绘制男生柱体),然后在第一个系列柱状体的右边绘制第二个系列的柱体(如女生柱体)。

这时就需要解决一个问题:应该如何确定第二个系列的柱状体所应在的位置信息呢?要想解决这个问题,就需要了解绘制柱状图plt.bar()中的两个参数:x和width。

x:用于控制主体应该绘制在哪
width:柱状体的宽度

有了这两个参数,便可以知道柱体右侧的位置信息了:x+width

写一份简单的代码示意一下:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = [u'SimHei'] 
plt.rcParams['axes.unicode_minus'] = False

boyNum=[2, 3, 4]
girlNum=[4, 5, 6]

width=0.4
plt.bar([i for i in range(len(boyNum))], boyNum, width=width, label='男生')
plt.bar([i+width for i in range(len(boyNum))], girlNum, width=width, label='女生')

plt.legend()
plt.show()

结果:
在这里插入图片描述
这里主要关注这两行代码:

plt.bar([i for i in range(len(boyNum))], boyNum, width=width, label='男生')
plt.bar([i+width for i in range(len(boyNum))], girlNum, width=width, label='女生')

第一行代码是绘制男生系列柱状体,它的位置是:[0, 1, 2],宽度width为0.4
第二行代码是绘制女生系列柱状体,它的位置是:[0+0.4, 1+0.4, 2+0.4],宽度仍为0.4

二、双柱状图的完善

1. 增加图片标题

plt.title('各班级人数')

结果:
在这里插入图片描述

2. 增加x轴y轴标题

plt.bar([i for i in range(len(boyNum))], boyNum, width=width, label='男生')
plt.bar([i+width for i in range(len(boyNum))], girlNum, width=width, label='女生')

结果:
在这里插入图片描述

3. 增加x轴注释

我们希望在每两个柱状图中间写上类似:班级一,班级二等,就像这样:

在这里插入图片描述
那么如何保证注释在两个柱状体之间呢?仔细观察可以发现,注释所在的位置=第一个系列柱体所在的位置+1/2*width

因此,可以使用如下代码解决:

plt.xticks([x+width/2 for x in range(3)], ['班级1', '班级2', '班级3'])

最终的效果图:

在这里插入图片描述

四、完整代码

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = [u"SimHei"] 
plt.rcParams["axes.unicode_minus"] = False

totalWidth=0.8 # 一组柱状体的宽度
labelNums=2 # 一组有两种类别(例如:男生、女生)
barWidth=totalWidth/labelNums # 单个柱体的宽度
seriesNums=3 # 一共有3组(例如:3个班级)

plt.bar([x for x in range(seriesNums)], height=[4,5,6], label="男生", width=barWidth)
plt.bar([x+barWidth for x in range(seriesNums)], height=[2,3,4], label="女生", width=barWidth)

plt.xticks([x+barWidth/2*(labelNums-1) for x in range(seriesNums)], ["班级1","班级2","班级3"])
plt.xlabel("班级")
plt.ylabel("人数")
plt.title("班级人数占比")
plt.legend()
plt.show()

堆积柱状图

一、堆积柱状图的绘制原理

如何使用matplotlib绘制简单的柱状图,例如:

import matplotlib.pyplot as plt

plt.bar([1,2,3],[4,5,6])
plt.show()

结果:
在这里插入图片描述
但是当数据分组分类别的时候例如我们想绘制一下每个班级的男女生人数的时候,我们往往想出来类似这样的效果:
在这里插入图片描述
那么这种图是怎么做的呢?其实它还是基于plt.bar(),但是更改了部分参数。

二、plt.bar参数介绍

让我们直接看一下matplotlib官方文档【1】是怎么介绍plt.bar()的参数的:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, , align='center', data=None, *kwargs)

这里详细介绍bottom参数(堆积柱状图就是基于此参数):

bottom: float or array-like, default: 0

The y coordinate(s) of the bars bases

翻译成中文是什么意思呢?就是说,我们的每一个“柱子”的高度是从y轴的哪一个值开始往上长。还不明白?没关系,还是以班级男女为例:
一开始我们画了一个bar为各班级男性人数:[4,5,6],现在我们再画一个女生bar,但是这次女生bar不再是从0开始,而是分别从[4,5,6]开始,即:

bar1=plt.bar([1,2,3],[4,5,6], label='男生')
bar2=plt.bar([1,2,3],[1,2,3],color='g',bottom=[4,5,6], label='女生')

三、完整代码:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = [u'SimHei'] 
plt.rcParams['axes.unicode_minus'] = False
bar1=plt.bar([1,2,3],[4,5,6], label='男生')
bar2=plt.bar([1,2,3],[1,2,3],color='g',bottom=[4,5,6], label='女生')
plt.xticks([1,2,3], ['班级1', '班级2', '班级3'])
plt.xlabel('班级')
plt.ylabel('人数')
plt.title('各班级男女人数对比')
plt.legend()
plt.show()

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

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

相关文章

机器人C++库(12)Robotics Library 之指定路径规划算法

机器人C库(12)Robotics Library 之路径规划算法:PRM、RRT、EET算法 RL库的运动规划(rl::plan)模块集成了以下经典的路径规划算法: PRM算法:概率路线图算法RRT算法:快速探索随机树算法EET算法:搜索树算法-基…

java计算机毕业设计ssm基金分析系统的设计与实现

项目介绍 计算机信息技术的发展,推动了基金信息化管理的进程,并随着互联网:概念的提出,各种互联网:软件也应运而生。在传统的管理中,各种信息管理难,传播速度慢,需要耗费很长时间统计核查,不能满足现代化的发展需求,基于JAVA的基金分析系统的提出解决了…

python+django家政服务中介网站系统

通常 一个Django model 对应一张数据表,model是以类的形式表现的 实现了ORM 对象与数据库映射 隐藏了数据访问细节 不需要写sql语句 admin是Django自带的 自动化数据管理界面 前端技术:nodejsvueelementui 我们最初的项目结构由五个文件组成&#xf…

《树莓派项目实战》第六节 使用超声波模块测距

目录 6.1 引脚介绍 6.2 工作原理 6.3 使用注意 6.4 连接到树莓派 6.5 编写代码输出距离 在本节,我们将学习如何使用HC-SR04超声波模块测量前方障碍物的距离,该项目设计到的材料有: 树莓派 * 1面包板 * 1杜邦线若干HC-SR04超声波模块* 1…

Mysql进阶之索引与视图和三大范式

1、索引(index) 1.1、什么是索引? 索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。 一张表的一个字段可以添加一个索引,当然,多个字段联合起来也可以添加索引。 索引相当于一本书的…

redis搭建主从、redis搭建集群、redis中StrictRedis()、RedisCluster()方法与python交互

一、StrictRedis方法 创建对象,指定host、port、db与指定的服务器端口连接,其中默认host为localhost、port为6379、db为0,不同类型调用的实例方法不同,与redis命令一致,方法需要的参数与命令参数一致 from redis imp…

Xavier(8):Xavier使用速腾聚创激光雷达运行a-loam算法部分报错与解决方案

文章目录1 速腾聚创激光雷达驱动报错:Project cv_bridge specifies /usr/include/opencv as an include dirProject grid_map_cv specifies /usr/include/opencv as an include dir2 a-loam算法报错: fatal error: opencv/cv.h: 没有那个文件或目录报错&…

无线社工基础

无线社工基础 一些社会工程学密码生成器(百度) Crunch工具 /usr/share/crunch/charset.lstcrunch 最短长度 最长长度 字符集 选项crunch 8 12 -f /usr/share/crunch/charset.lst ualpha -o /root/pass.txt Windows下对附近无线网络进行扫描 WirelessMon…

MySQL事务/事务与数据库底层数据/多点回滚/隔离级别/悲观锁和乐观锁/锁模式和分类/相关锁总结/JDBC事务实现

文章目录MySQL事务概述事务事务与数据库底层数据事务控制语句事务处理基本测试多点回滚相关日志问题redo logundo log隔离级别常见问题事务隔离性隔离级别的范围总结隔离等级读未提交读已提交可重复读串行化并发写问题幻读问题悲观锁和乐观锁锁模式锁分类按加锁方式分类按照算法…

基于贝叶斯推理估计稳态 (ST) 和非稳态 (NS) LPIII 模型分布拟合到峰值放电(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

ShardingSphere笔记(一): 经验和踩坑总结

ShardingSphere笔记(一): 使用经验总结 文章目录ShardingSphere笔记(一): 使用经验总结一、背景框架选择二、ShardingSphere-jdbc 只是一个帮助你路由的框架(踩坑总结)1. 它默认会认…

支持末尾携带标签的多行TextView

项目开发过程中,遇到个UI上的需求,本着不重复造轮子、敏捷开发的原则,于是乎网上找寻了一番,发现还是自己搞吧,搜不到这样的需求,先看下我们的效果。 总结有以下三点需要注意: 末尾vip部分是…

$19服务:DTCStatusMask和statusofDTC bit 定义

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,当ECU产生DTC时,我们只知道有故障发生了,并不清楚该故障什么时候发生,现在是否已经恢复、发生过几次,恢复过几次等信息,基于此ISO发布的14229-1使用DTC状态…

[附源码]SSM计算机毕业设计志愿者管理系统论文2022JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【VTK+有限元后处理】可视化结果云图

构建vtkUnstructuredGrid对象 为了读取不同格式的有限元计算结果文件,我们先写一个FEDataModel类来管理有限元的几何拓扑和属性信息。 class FEDataModel:"""有限元数据模型类"""def __init__(self):self.nodes [] # 节点几何坐标…

斐波那契数列和斐波那契数

一、什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这…

【考研复试】计算机专业考研复试英语常见问题三(个人选择/学业规划篇)

相关链接: 【考研复试】计算机专业考研复试英语常见问题一(家庭/家乡/学校篇)【考研复试】计算机专业考研复试英语常见问题二(研究方向/前沿技术/本科毕设篇)【考研复试】计算机专业考研复试英语常见问题三&#xff0…

C++---哈希

目录 1. unordered系列关联式容器 1.1 unordered_map 1.1.1 unordered_map的介绍 1.1.2 unordered_map的接口说明 1.2 unordered_set 2. 底层结构 2.1 哈希概念 2.2 哈希冲突 2.3 哈希函数 2.4 哈希冲突解决 2.4.1 闭散列 2.4.2 开散列 3. 封装unorder_map和unord…

MySQL增删改查进阶 — 表的设计

文章目录表的设计1.设计思路2.实体固定关系的套路2.1 一对一关系2.2 一对多关系2.3 多对多关系3.总结表的设计 表的设计实际上要做的工作就是明确一个程序里,需要使用几个数据库,几个表,表里都有哪些列。 1.设计思路 先明确实体再明确实体…

6. Design A Web Crawler

title: Notes of System Design No.10 — Design a Web Crawler description: ‘Design a Web Crawler’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is Web Crawler? Q :uh just for now lets just do html pagesbut your web cr…