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私有属性和方法实例分析
Jan 15 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python内置函数delattr的具体用法
Nov 23 Python
Python random模块用法解析及简单示例
Dec 18 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 Python
Python中json.dumps()函数的使用解析
May 17 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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
NodeJs实现定时任务的示例代码
2017/12/05 NodeJs
Angular通过指令动态添加组件问题
2018/07/09 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
代码整洁之道(重构)
2018/10/25 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
卫校中专生个人自我评价
2013/09/19 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
经理岗位职责范本
2015/04/15 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
详解redis分布式锁的这些坑
2021/05/19 Redis