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入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
Python中的类与类型示例详解
Jul 10 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
python ubplot使用方法解析
Jan 10 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 Python
python 单机五子棋对战游戏
Apr 28 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的网址
2006/11/25 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
JointJS流程图的绘制方法
2018/12/03 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python 多线程实例详解
2017/03/25 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
python实现126邮箱发送邮件
2020/05/20 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
廉洁自律演讲稿
2014/05/22 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
公证处委托书
2015/01/28 职场文书
教师节校长致辞
2015/07/31 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL