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中subprocess模块用法实例详解
May 20 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
python 二维数组90度旋转的方法
Jan 28 Python
Python日期时间Time模块实例详解
Apr 15 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 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转换IP地址到真实地址的方法详解
2013/06/09 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
python爬虫---requests库的用法详解
2020/09/28 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
有模特经验的简历自我评价
2013/09/19 职场文书
大学生毕业自荐信
2013/10/10 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
婚礼答谢词范文
2015/09/29 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang