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递归查询菜单并转换成json实例
Mar 27 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
Python饼状图的绘制实例
Jan 15 Python
使用Template格式化Python字符串的方法
Jan 22 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
python实现自动化上线脚本的示例
Jul 01 Python
python实现微信自动回复机器人功能
Jul 11 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
python打开音乐文件的实例方法
Jul 21 Python
Python如何输出百分比
Jul 31 Python
Django执行源生mysql语句实现过程解析
Nov 12 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递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
php重定向的三种方法分享
2012/02/22 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
教大家制作简单的php日历
2015/11/17 PHP
php和nginx交互实例讲解
2019/09/24 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
python读取Android permission文件
2013/11/01 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
2014年幼儿园元旦活动方案
2014/02/13 职场文书
21岁生日感言
2014/02/27 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
幼儿园评语大全
2014/04/17 职场文书
好听的队名和口号
2014/06/09 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
原告离婚代理词
2015/05/23 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python