当前位置: 首页 > 编程日记 > 正文

简介+原理+绘制,详解 Python「瀑布图」的整个制作流程!

cb338e3800a678b55d1fb6c9f1dea9e0.gif

作者|黄伟呢

来源|数据分析与统计学之美

简介

瀑布图,由麦肯锡顾问公司所独创的图表类型,因为形似瀑布流水,所以被大家称之为瀑布图(Waterfall Plot),在企业经营分析、财务分析中使用较多,用以表示企业成本的构成、变化等情况。

瀑布图本质:堆积柱形图的绘制。

66de08ed5823a2131f00a98a894a331e.png

瀑布图的绘图原理

那么,如何用Python绘制这样一个瀑布图呢?

很多人不知道如何绘制瀑布图,是由于对瀑布图的绘图原理,不够清楚。

因此,这里先来讲述一下瀑布图的绘图原理。

69c62f4110b1b38897df79c704a2ca6f.png

有这样一份原始数据:

79c6fdfc96629a3993fe19857397066c.png

从最开始的销售,经过退货、信用费、回扣、滞纳金、运费,这一系列的操作后,最后肯定还有一个净总量。因此,我们需要添加这样一行。

97614006649609a989042369626bd9d7.png

注意:在瀑布图中,最初的“销售”与最后的“净总量”,都是以坐标轴原点为起点。

瀑布图本身就是要体现这个增减变动过程。因此,这里涉及到一个占位,如图所示:

15e119d87ff770751531e0fa7fea24f6.png

除了首尾两个字段,都是以原点起步的,中间过程要体现这个波动过程。我特意用不同颜色,为大家圈出了这个占位的高度,但是在瀑布图中,我们并不显示出来。

文章最开始就说了,瀑布图的本质其实就是堆积的柱形图。

为了构造这个占位数据,我们需要对数据进行一定的处理。让首尾字段的数据都为0,中间部分,表示占位高度。

370849f187f08cc40c1f116bf1faa036.png

最后,我们利用原始数据与占位高度数据,做一个堆叠的柱形图,就可以展示出这个瀑布效果了。

aa96fade766cadc8664ace1dcfdb4e5d.png

瀑布图的绘图步骤

现在我就为大家讲解详细的步骤。

1. 导入相关库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2.  创建数据

index = ['销售','退货','信用费','回扣','滞纳金','运费']
data = {'金额': [350000,-30000,-7500,-25000,95000,-7000]}
df = pd.DataFrame(data=data,index=index)
df

结果如下:

4fd44afa24e0928ccd29f4d0a85a1521.png

瀑布图的最大问题就是弄清楚,底部堆积的条形图应该是什么。

首先,先求累积和。

df["金额"].cumsum()

结果如下:

7fcd80784b283bcc6170e493c92bf43b.png

原理部分,已经为大家讲述过,瀑布图 = 原始数据 + 占位数据,堆积而成。

因此,对于占位数据,它的首位数据,我们必须将其变为0.

total = df.sum()["金额"]
df.loc["净总量"] = total
blank = df["金额"].cumsum().shift(1).fillna(0)
blank.loc["净总量"] = total
blank.loc["净总量"] = 0

结果如下

317f8ccc469fec786c919bf41894299e.png

其实,一行Python代码,就可以完成瀑布图的绘制。

df.plot(kind='bar', stacked=True, bottom=blank,legend=None, title="瀑布")plt.xticks(rotation=60)
plt.ylim(-100000,400000)
plt.grid()

结果如下:

7b0c76e6203ecd60a6f24d77ff935675.png

其实,到这里瀑布图的绘制已经结束了。但是,为了是这个增减变动更加清楚,我们可以添加一个阶梯。

# 多添加一个绘图代码
step = blank.reset_index(drop=True).repeat(3).shift(-1)
step[1::3] = np.nanmy_plot = df.plot(kind='bar', stacked=True, bottom=blank,legend=None, title="瀑布图")
my_plot.plot(step.index, step.values,'k')
plt.xticks(rotation=60)
plt.ylim(-100000,400000)
plt.grid()

结果如下:

da5e107b71f462d302e79f8f63c7d24c.png

值得注意的问题

在下面这行代码中,有一个bottom参数。

df.plot(kind='bar', stacked=True, bottom=blank,legend=None, title="瀑布图")

其实该参数,表示的是堆积柱形图的起始点,如果数据为正,则柱子在该起始点之上,如果数据为负,则柱子在该起始点之下。

我们为大家举例说明:

import numpy as np
import matplotlib.pyplot as pltx = np.arange(5)
a = np.array([10, 15, 20, 15, 5])
b = np.array([5, -20, 7, -25, 9])plt.bar(x, b, bottom=a, label='b')
plt.grid()
plt.show()

结果如下:

da7c51acdde9d4f272139be8e15aa529.png

观察上图,我为大家标注好了起始点,如果数据为正,柱子都是朝上,否则就朝下。

e37ab1c6a0abc0b5491afc88c3b87876.gif

c24e3efa489aff07a23eec77b4a6d669.png

资讯

AI 将有自我视觉?Facebook正在研究新系统

资讯

微软、英伟达联手推出最大语言模型

大赛

API 大赛决赛名单出炉!

技术

ST-GCN 实现人体姿态行为分类

b21a6b154fbdc1033a3531f02dbb30a8.png

分享

51ee967103d8bdad0b303299c025a406.png

点收藏

88f7e49b158f4668993f21d16184ff9d.png

点点赞

56b385c50d1142990daad304aa36b066.png

点在看

相关文章:

Ubuntu 忘记root登录密码的解决办法

2019独角兽企业重金招聘Python工程师标准>>> 之前做了个虚拟机,最近需要用到,密码忘记了,下面是在忘记密码的情况下登录系统休修改密码,需要进入GRUB修改kernel镜像启动参数 1、重启电脑长按shift键直到进入下图进入GR…

10月21日!API 大赛决赛暨移动云开发者论坛邀您见证数字创新的力量

2021年7月,移动云API应用创新开发大赛正式启动,历时近两个月的时间,共计报名889人,最终提交作品166项。经过前期初审、初赛、复赛等环节,最终企业、移动和高校赛道共29个目团队成功问鼎移动云API应用创新开发大赛决赛榜…

负载均衡环境中和如何设置Expires和Etag

在负载均衡环境中(LVS, LoadBalance)为了减少浏览器数据的重复请求操作,一般需要设置 Http Header 的 Etage 和 Expires 告诉浏览器请求数据是否已过期。以下内容主要考虑Apachesquid 环境 ETag Header是文件修改时间、文件大小和inode号生成…

C++之typedef 小记

2019独角兽企业重金招聘Python工程师标准>>>  以前曾不知道为何要用typedef,随着开发的深入,真正感受到了其内涵所在: 1.如:typedef int DataType 接下来项目中的几万行代码中,如果…

Android Go初探

Android Ore(Go edition) 简介: Android Go并不是一个独立的操作系统,它只是Android O的一种轻量级配置方案,专为1GB以下内存的机型设计, 在这种设置下,一些消耗大量资源的功能将被关闭,同时预装的应用也是…

Apache HTTP Server Version 2.2 文档中文版

模块索引 | 指令索引 | 常见问题 | 词汇表 | 站点导航 Apache HTTP Server 版本2.2 Apache > HTTP Server > 文档 > 版本2.2致谢 | 本篇译者:金步国(其他作品) | 本页最后更新:2006年10月20日[查看最新版本] 电信镜像 网通镜像Apache HTTP Ser…

归一化变换 Normalizing transformations

归一化变换包含两个部分,图像坐标的平移和尺度的缩放。进行归一化的变换不但能够提高处理结果的精确度,而且通过选择一个标准的坐标系预先的消除了图像尺度和坐标原点的选择对算法最终结果的影响。 归一化变换的步骤: 对点进行平移&#xff0…

Arm 通过虚拟硬件与新的解决方案导向的产品 带动物联网经济转型

Arm物联网全面解决方案通过一套全栈式解决方案,大幅加速产品开发进程并提高投资回报率;Arm虚拟硬件使得开发无需基于实体芯片进行,促成软件与硬件的共同设计,让产品开发时间最多缩短两年;Project Centauri作为Arm新的生…

数据库设计 之设计 表字段类型

2019独角兽企业重金招聘Python工程师标准>>> 数据库设计 之设计 表字段类型 博客分类: sql 之前没有 数据库设计的一些经验。 这次数据库设计。由于需求原因和没经验原因。 一些数字类型的字段设计成了varchar2 一些日期类型的字段也设计成了varchar2 一…

Apache关掉Etag和Last-Modified的方法

Apache关掉Etag和Last-Modified的方法,可能也只有我这种无聊的人才会做这种事情.哈哈,关掉etag和last-modified会出现什么样的情况。做一个这样的测试. 不要问我这二个参数是做什么的。。。。。在我的blog中有写. Etag关掉的方法如下,加一个none FileETag none …

P2P最易遭受的DDoS***以及防御手段

从07年的爱沙尼亚DDoS信息战,到2009年广西南宁30个网吧遭受到DDoS勒索,再到新浪网遭受DDoS***无法提供对外服务500多分钟。DDoS愈演愈烈,***事件明显增多,***流量也明显增大,形势十分严峻,超过1G的***流量频…

从飞天到倚天 阿里云底层自研技术大爆发

10月20日,2021云栖大会上,阿里云发布了倚天、磐久、神龙4.0、龙蜥、灵杰等多款重磅产品,阿里云“做深基础”成果浮出水面,底层自研技术迎来大爆发。 阿里云智能总裁张建锋表示,过去十二年,阿里云打造出中国…

CSS vs. JS Animation: 哪个更快

CSS vs. JS Animation: 哪个更快? CSS vs. JS Animation: 哪个更快? 基于JavaScript的动画竟然已经默默地比CSS的transition动画快了?而且,Adobe和 Google竟然一直在发布可以媲美原生应用的富媒体移动站点? 这篇文章将会逐点讲解基于JavaSc…

Squid下Http头信息优先级

no-cache>Expires>refresh_pattern>Last-Modified 也就是讲,最前面的最重要,前面的生效后,后面的基本就失效了. 另外squid本身就能对比Last-Modified,但根据我的测试,Etag还是会要向源服务器发送请求头,来确认etag的. ETag默认是需要向源网站…

阿里云PolarDB数据库将云原生进行到底!业内首次实现三层池化

10月20日,在2021云栖大会上,阿里云宣布自研云原生关系型数据库PolarDB重磅升级,实现内存池化、多主架构、HTAP实时分析等创新功能,进一步引领云原生数据库技术的持续创新。 阿里云智能数据库事业部总负责人李飞飞表示,…

zencoding实践

2019独角兽企业重金招聘Python工程师标准>>> .container<div class"container"></div>.wrap>ul>.list>.site <div class"wrap"><ul><li class"list"><div class"site"></…

第三期 OSI七层中第一层 物理层

物理层1、信号1&#xff09;信息2&#xff09;数据3&#xff09;信号&#xff1a;信息传递的媒介 4&#xff09;信号的分类&#xff1a;模拟信号&#xff1a;连续变化的物理量。数字信号&#xff1a;不连续的物理量&#xff0c;信号参数也不连续变化&#xff0c;高低固定。5&am…

Squid的refresh_pattern配置

refresh_pattern 大概是 squid 最有意思但最不好懂的配置参数了。 记住refresh_pattern 只对后端没设置Expires过期时间的页面起作用&#xff0c;比如论坛页面&#xff1b;而对类似apache mod_expires 设置过的页面不起作用。 说明之前&#xff0c;先将个概念LM&#xff0c;L…

阿里云发布第四代神龙架构云计算首次进入5微秒时延时代

10月20日&#xff0c;2021云栖大会上&#xff0c;阿里云宣布推出第四代神龙架构&#xff0c;这是飞天云操作系统新一代虚拟化技术&#xff0c;首次搭载全球唯一的大规模弹性RDMA加速网络&#xff0c;网络延迟整体降低80%以上。神龙4.0带来的计算架构革新&#xff0c;将云计算首…

【微服务】Spring-Boot整合Consul (自定义服务配置及健康检查)

为什么80%的码农都做不了架构师&#xff1f;>>> 目的 上文提到仅使用discovery包自带的注册功能进行服务注册&#xff0c;但是由于监控的是 /health&#xff0c;使用actuator实现自由度不够&#xff0c;并且有些低级异常可能不完全影响服务运行&#xff0c;但状态依…

Apache URL重定向避免网址结尾斜线问题

结尾斜线问题描述: 每个网主都曾受到结尾斜线问题的折磨&#xff0c;若在URL中没有结尾斜线&#xff0c;服务器就会认为URL无效并返回错误&#xff0c;因为服务器会根据/~quux/foo去寻找foo这个档案&#xff0c;而非显示这个目录。其实很多时候&#xff0c;这问题应留待用户自己…

16:00面试,16:08就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。好在有个兄弟内推我…

提前了解客户背景很有必要

2019独角兽企业重金招聘Python工程师标准>>> 最近&#xff0c;公司与某电商展开了合作&#xff0c;我司将为该电商提供提供一套广告解决方案。我有幸参与到这个项目&#xff0c;了解该电商的需求&#xff0c;思考公司的产品是否能够和如何满足这些需求。近日&#x…

wamp多站点访问设置

1、修改C:\Windows\System32\drivers\etc\hosts文件 2、修改httpd.conf和httpd-vhosts.conf文件 3、重启apache转载于:https://www.cnblogs.com/liusirdotme/p/8177386.html

满足极高读写性能需求的Key-Value数据库

满足极高读写性能需求的Key-Value数据库 高性能Key-Value数据库的主要特点就是具有极高的并发读写性能&#xff0c;Redis&#xff0c;Tokyo Cabinet&#xff0c; Flare&#xff0c;这3个Key-Value DB都是用C编写的&#xff0c;他们的性能都相当出色&#xff0c;但出了出色的性…

QQ群功能设计与心理学

2019独角兽企业重金招聘Python工程师标准>>> 刚刚在一个Java技术交流群&#xff0c;发了个 "博客投票"的广告。 群主两眼一黑&#xff0c;瞬间就把我给干掉了。 看到QQ给出的系统消息&#xff0c;发现QQ群的一个功能做得很不错。 大家注意到&#xff0c;右…

龙蜥降世,神龙升级,阿里云投入 20 亿发力操作系统

作者 | 贾凯强、伍杏玲 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 20 日&#xff0c;阿里巴巴云栖大会继续在杭州进行&#xff0c;与开幕第一天的主论坛不同&#xff0c;第二天活动的主论坛更加聚焦与技术领域和技术实践。20 日上午&#xff0c;阿里…

35.2. Subversion 版本控制

subversion 初始化trunk branches releases tags svn co svn://127.0.0.1/document cd project mkdir trunk mkdir tags mkdir branches mkdir releases svn ci -m "Initialized empty subversion repository in your_project"创建docbook文档&#xff0c;安排章节…

使用卷积神经网络预防疲劳驾驶事故

作者|小白来源|小白学视觉疲劳驾驶&#xff1a;一个严重的问题美国国家公路交通安全管理局估计&#xff0c;每年有 91,000 起车祸涉及疲劳驾驶的司机&#xff0c;造成约50,000 人受伤和近 800 人死亡。此外&#xff0c;每 24 名成年司机中就有 1 人报告在过去 30 天内在驾驶时睡…

详解Apache下.htaccess文件常用配置

.htaccess文件是Apache服务器中最常用的一个配置文件&#xff0c;它负责相关目录下的网页配置。通过htaccess文件&#xff0c;可以帮我们实现&#xff1a;网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置索引入口等…