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实现简单EXCEL数据统计的实例
Jan 24 Python
Python计算两个日期相差天数的方法示例
May 23 Python
mac系统安装Python3初体验
Jan 02 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
详解Django之auth模块(用户认证)
Apr 17 Python
python获取代码运行时间的实例代码
Jun 11 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
利用Python检测URL状态
Jul 31 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 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生成文件
2007/01/15 PHP
一个数据采集类
2007/02/14 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
Python中的并发编程实例
2014/07/07 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python实现烟花小程序
2019/01/30 Python
django做form表单的数据验证过程详解
2019/07/26 Python
django foreignkey(外键)的实现
2019/07/29 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
Bootstrap 学习分享
2012/11/12 HTML / CSS
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
英国电子专家:maplin
2019/09/04 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
法律专业自我鉴定
2013/10/03 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
初中生自我评价
2014/02/01 职场文书
意向协议书范本
2014/04/23 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers