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 02 Python
深入探究Django中的Session与Cookie
Jul 30 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
Python参数传递对象的引用原理解析
May 22 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
python基于opencv实现人脸识别
Jan 04 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 MYSQL中插入当前时间
2008/04/06 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
JS实现简易计算器
2020/02/14 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
全面了解Python环境配置及项目建立
2016/06/30 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
酒店服务与管理毕业生求职信
2013/11/02 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
学籍证明模板
2015/06/18 职场文书
小学校本教研总结
2015/08/13 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
分享7个 Python 实战项目练习
2022/03/03 Python