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常用模块介绍
Nov 21 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
python中PS 图像调整算法原理之亮度调整
Jun 28 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
django-csrf使用和禁用方式
Mar 13 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 Python
Python实现双向链表
May 25 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
PHP6 mysql连接方式说明
2009/02/09 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
python多进程共享变量
2016/04/06 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
办公室副主任岗位职责
2013/11/25 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
村级个人对照检查材料
2014/08/22 职场文书
自我管理的活动方案
2014/08/25 职场文书
公司聚餐通知
2015/04/22 职场文书
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS