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 专题二 条件语句和循环语句的基础知识
Mar 19 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
对python中的xlsxwriter库简单分析
May 04 Python
利用Python实现手机短信监控通知的方法
Jul 22 Python
Python中的list与tuple集合区别解析
Oct 12 Python
详解Django admin高级用法
Nov 06 Python
python的slice notation的特殊用法详解
Dec 27 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
Python3 webservice接口测试代码详解
Jun 23 Python
Python hashlib模块的使用示例
Oct 09 Python
Django restful framework生成API文档过程详解
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
把77A收信机改造成收音机
2021/03/02 无线电
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
深入理解Django中内置的用户认证
2017/10/06 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
python代码编写计算器小程序
2020/03/30 Python
解决Django中多条件查询的问题
2019/07/18 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
python爬虫基础之urllib的使用
2020/12/31 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
护士进修自我鉴定
2014/02/07 职场文书
员工安全生产承诺书
2014/05/22 职场文书
教师节活动总结
2014/08/29 职场文书
会议新闻稿
2015/07/17 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android