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 Requests安装与简单运用
Apr 07 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
使用python对excle和json互相转换的示例
Oct 23 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
Python csv文件的读写操作实例详解
Nov 19 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
python 实现弹球游戏的示例代码
Nov 17 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
Django如何创作一个简单的最小程序
May 12 Python
详解Python requests模块
Jun 21 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 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&java(二)
2006/10/09 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
python列表的常用操作方法小结
2016/05/21 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
用python制作游戏外挂
2018/01/04 Python
Python检测网络延迟的代码
2018/05/15 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
python3实现磁盘空间监控
2018/06/21 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
MADE法国:提供原创设计师家具
2018/09/18 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
公司周年庆典邀请函
2014/01/12 职场文书
出生公证委托书
2014/04/03 职场文书
贷款委托书范本
2014/04/08 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
MySQL RC事务隔离的实现
2022/03/31 MySQL
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android