matplotlib bar()实现百分比堆积柱状图


Posted in Python onFebruary 24, 2021

使用matplotlib创建百分比堆积柱状图的思路与堆积柱状图类似,只不过bottom参数累计的不是数值而是百分比,因此,需要事先计算每组柱子的数值总和,进而求百分比。

matplotlib bar()实现百分比堆积柱状图

未使用numpy版本

适用于少量数据,数据结构需要手动构造。

import matplotlib.pyplot as plt

labels = ['G1', 'G2', 'G3', 'G4', 'G5']
first = [20, 34, 30, 35, 27]
second = [25, 32, 34, 20, 25]
third = [21, 31, 37, 21, 28]
fourth = [26, 31, 35, 27, 21]
data = [first, second, third, fourth]

x = range(len(labels))
width = 0.35

# 将bottom_y元素都初始化为0
bottom_y = [0] * len(labels)
# 计算每组柱子的总和,为计算百分比做准备
sums = [sum(i) for i in zip(first, second, third, fourth)]
for i in data:
 # 计算每个柱子的高度,即百分比
 y = [a/b for a, b in zip(i, sums)]
 plt.bar(x, y, width, bottom=bottom_y)
 # 计算bottom参数的位置
 bottom_y = [(a+b) for a, b in zip(y, bottom_y)]

plt.xticks(x, labels)
plt.title('Percent stacked bar ')
plt.show()

使用numpy版本

第一个版本的缺陷在于数据需要手动构造,而且计算稍微繁琐一些。
使用numpy便于处理规模比较大且已存储在文件中数据的数据,计算更简便。

import numpy as np
import matplotlib.pyplot as plt

labels = ['G1', 'G2', 'G3', 'G4', 'G5']
first = [20, 34, 30, 35, 27]
second = [25, 32, 34, 20, 25]
third = [21, 31, 37, 21, 28]
fourth = [26, 31, 35, 27, 21]
data = [first, second, third, fourth]

x = range(len(labels))
width = 0.35

# 将bottom_y元素都初始化为0
bottom_y = np.zeros(len(labels))
data = np.array(data)
# 按列计算计算每组柱子的总和,为计算百分比做准备
sums = np.sum(data, axis=0)
for i in data:
 # 计算每个柱子的高度,即百分比
 y = i / sums
 plt.bar(x, y, width, bottom=bottom_y)
 # 计算bottom参数的位置
 bottom_y = y + bottom_y

plt.xticks(x, labels)
plt.title('Percent stacked bar ')
plt.show()

到此这篇关于matplotlib bar()实现百分比堆积柱状图 的文章就介绍到这了,更多相关matplotlib 百分比堆积柱状图 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
对于Python的框架中一些会话程序的管理
Apr 20 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
python sort、sort_index方法代码实例
Mar 28 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
Django分页功能的实现代码详解
Jul 29 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
python Matplotlib模块的使用
Sep 16 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
如何用python 操作zookeeper
Dec 28 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 #Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 #Python
pandas map(),apply(),applymap()区别解析
Feb 24 #Python
Python的Tqdm模块实现进度条配置
Feb 24 #Python
详解pandas apply 并行处理的几种方法
Feb 24 #Python
python自动生成sql语句的脚本
Feb 24 #Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 #Python
You might like
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
使用Python实现微信提醒备忘录功能
2018/12/04 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
Django celery异步任务实现代码示例
2020/11/26 Python
解决python3输入的坑——input()
2020/12/05 Python
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
授权委托书范本
2014/04/03 职场文书
校长创先争优承诺书
2014/08/30 职场文书
普通党员整改措施
2014/10/24 职场文书
任命书格式模板
2015/09/22 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
Python 统计序列中元素的出现频度
2022/04/26 Python