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 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
在Python中使用SimpleParse模块进行解析的教程
Apr 11 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
Python实现大文件排序的方法
Jul 10 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
Python zip()函数用法实例分析
Mar 17 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
python将unicode和str互相转化的实现
May 11 Python
Python魔术方法专题
Jun 19 Python
python实现无边框进度条的实例代码
Dec 30 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
javascript下function声明一些小结
2007/12/28 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
angular.element方法汇总
2015/01/07 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
Python的Django框架中的数据库配置指南
2015/07/17 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
python中if嵌套命令实例讲解
2021/02/25 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
有关九一八事变的演讲稿
2014/09/14 职场文书
机械生产实习心得体会
2016/01/22 职场文书
入团申请书格式
2019/06/20 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python