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 03 Python
Python3读取zip文件信息的方法
May 22 Python
Python网络编程详解
Oct 31 Python
python3+PyQt5泛型委托详解
Apr 24 Python
python 处理string到hex脚本的方法
Oct 26 Python
Python中的self用法详解
Aug 06 Python
Python实现时间序列可视化的方法
Aug 06 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 Python
Python pandas库中的isnull()详解
Dec 26 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
Python实现AES加密,解密的两种方法
Oct 03 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
15种PHP Encoder的比较
2007/03/06 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
用Juery网页选项卡实现代码
2011/06/13 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
详谈python read readline readlines的区别
2017/09/22 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
2014年机关植树节活动方案
2014/02/27 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
微笑服务标语
2014/06/24 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang