作者|黄伟呢

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

简介

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

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

瀑布图的绘图原理

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

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

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

有这样一份原始数据:

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

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

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

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

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

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

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

瀑布图的绘图步骤

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

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

结果如下:

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

首先,先求累积和。

df["金额"].cumsum()

结果如下:

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

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

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

结果如下

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

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

结果如下:

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

# 多添加一个绘图代码
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()

结果如下:

值得注意的问题

在下面这行代码中,有一个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()

结果如下:

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

资讯

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

资讯

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

大赛

API 大赛决赛名单出炉!

技术

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

分享

点收藏

点点赞

点在看

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

  1. 全文详解:「深度学习」如何协助处理医疗中的「数据难题」

    原文来源:WordPress 作者:Luke Oakden-Rayner 「雷克世界」编译:嗯~是阿童木呀.KABUDA.EVA 医疗数据很难处理. 在医学成像中,数据存储(档案)是基于临床假设进行操 ...

  2. mapreduce图示原理深入详解,几张图搞定

    1. MAPREDUCE原理篇 Mapreduce 是一个分布式运算程序的 编程框架 , 是用户开发"基于 hadoop 的数据分析应用"的核心框架: Mapreduce 核心功能 ...

  3. python垃圾回收机制原理_详解python的垃圾回收机制

    python的垃圾回收机制 一.引子 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存空间给回收掉,而变量名是访问到变量值的唯一方式 ...

  4. TYPE-C接口的工作原理图文详解

    TYPE-C接口的工作原理图文详解 发表于 2018-01-29 09:53:53 电子常识 +关注 2016年,有一个名词在手机上非常火,几乎所有的旗舰手机都会提到这个名词,说到这,大家应该都够猜到 ...

  5. [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)...

    此文转载自:https://blog.csdn.net/Eastmount/article/details/111568397#commentBox 该系列文章是讲解Python OpenCV图像处理 ...

  6. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  7. python super()方法的作用_详解python的super()的作用和原理

    Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.uz0免费资源网 今天我们介绍的主角是s ...

  8. Python中常见的__init__.py是什么意思?详解Python import的方式和原理

    Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...

  9. python绘制单线图_CAD制图管道单线图绘制详解.ppt

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp计算机辅助设计 CAD制图管道单线图绘制详解.ppt89页 本文 ...

最新文章

  1. 最近一段时间开发客户端app的感悟
  2. 获取Moment Js中两个日期之间的小时差异
  3. 软件工程--软件设计
  4. Apollo分布式配置中心在本地的安装教程
  5. SoftReference的用法
  6. 五分钟轻松搞定产品需求文档!这可能史上最全PRD文档模板…
  7. python自学教程变量_Python学习入门基础教程(learning Python)--2.2.1 Python下的变量解析...
  8. 在IE下,当eval遇上function
  9. Win7/Win8.1升级Win10后屏幕一直闪烁怎么办?
  10. JavaScript:零星知识
  11. for,foreach,iterator的用法和区别
  12. java 发展方向_Java程序员的发展方向有哪些
  13. 继爱奇艺之后,腾讯视频、优酷宣布:取消剧集超前点播服务
  14. null索引表键值_MySQL 的B+树索引
  15. 0 full gc时cpu idle_结合GC日志讲讲CMS垃圾收集器
  16. 谷歌flutter_在Flutter中使用Google Pay Through Stripe接受付款
  17. 计算机修改WINDOWS版本,Windows OEM修改器
  18. word文档怎么压缩,word压缩大小
  19. LeetCode刷题小技巧-错题记录本-C++版本
  20. echarts地图城市坐标

热门文章

  1. python查询mysql中文乱码问题
  2. 15crmo焊接后多长时间探伤_15CrMo十五铬钼属于合金钢?、下面来解释一下
  3. Android -- Fragment注意事项
  4. 新型智能电视攻击,9成国外设备或受影响
  5. Vue 数组中更新属性值后,视图不更新,等待其他元素更新后会触发的解决办法...
  6. Python-常用字符串转换实例
  7. 【Chat】实验 -- 实现 C/C++下TCP, 服务器/客户端 多人聊天室
  8. 使用photoshop 10.0制作符合社保要求的照片
  9. 电动汽车换电的优缺点分析
  10. 指针小白:修改*p与p会对相应的地址的变量产生什么影响?各个变量指针的长度为多少?...