教你用Python创建瀑布图
admin
2023-07-30 21:55:07
0

介绍

对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具。不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图。

在往下进行之前,我想先告诉大家我指代的是哪种类型的图表。我将建立一个维基百科文章中描述的2D瀑布图。

这种图表的一个典型的用处是显示开始值和结束值之间起“桥梁”作用的+和-的值。因为这个原因,财务人员有时会将其称为一个桥梁。跟我之前所采用的其他例子相似,这种类型的绘图在Excel中不容易生成,当然肯定有生成它的方法,但是不容易记住。

关于瀑布图需要记住的关键点是:它本质上是一个堆叠在一起的条形图,不过特殊的一点是,它有一个空白底栏,所以顶部栏会“悬浮”在空中。那么,让我们开始吧。

创建图表

首先,执行标准的输入,并确保IPython能显示matplot图。

123 import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

1 %matplotlib inline

设置我们想画出瀑布图的数据,并将其加载到数据帧(DataFrame)中。

数据需要以你的起始值开始,但是你需要给出最终的总数。我们将在下面计算它。

123 index = [\’sales\’,\’returns\’,\’credit fees\’,\’rebates\’,\’late charges\’,\’shipping\’]data = {\’amount\’: [350000,30000,7500,25000,95000,7000]}trans = pd.DataFrame(data=data,index=index)

我使用了IPython中便捷的display函数来更简单地控制我要显示的内容。

12 from IPython.display import displaydisplay(trans)

瀑布图的最大技巧是计算出底部堆叠条形图的内容。有关这一点,我从stackoverflow上的讨论中学到很多。

首先,我们得到累积和。

12345678 display(trans.amount.cumsum())sales           350000returns         320000credit fees     312500rebates         287500late charges    382500shipping        375500Name: amount, dtype: int64

这看起来不错,但我们需要将一个地方的数据转移到右边。

12 blank=trans.amount.cumsum().shift(1).fillna(0)display(blank)

1234567 sales                0returns         350000credit fees     320000rebates         312500late charges    287500shipping        382500Name: amount, dtype: float64

我们需要向trans和blank数据帧中添加一个净总量。

12345 total = trans.sum().amounttrans.loc[\”net\”] = totalblank.loc[\”net\”] = totaltotalblank.loc[\”net\”] = total Helvetica, Arial, sans-serif;font-size: 24px;font-style: normal;font-weight: bold;line-height: 36px\”>介绍

对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具。不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图。

在往下进行之前,我想先告诉大家我指代的是哪种类型的图表。我将建立一个维基百科文章中描述的2D瀑布图。

这种图表的一个典型的用处是显示开始值和结束值之间起“桥梁”作用的+和-的值。因为这个原因,财务人员有时会将其称为一个桥梁。跟我之前所采用的其他例子相似,这种类型的绘图在Excel中不容易生成,当然肯定有生成它的方法,但是不容易记住。

关于瀑布图需要记住的关键点是:它本质上是一个堆叠在一起的条形图,不过特殊的一点是,它有一个空白底栏,所以顶部栏会“悬浮”在空中。那么,让我们开始吧。

创建图表

首先,执行标准的输入,并确保IPython能显示matplot图。

123 import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

1 %matplotlib inline

设置我们想画出瀑布图的数据,并将其加载到数据帧(DataFrame)中。

数据需要以你的起始值开始,但是你需要给出最终的总数。我们将在下面计算它。

123 index = [\’sales\’,\’returns\’,\’credit fees\’,\’rebates\’,\’late charges\’,\’shipping\’]data = {\’amount\’: [350000,30000,7500,25000,95000,7000]}trans = pd.DataFrame(data=data,index=index)

我使用了IPython中便捷的display函数来更简单地控制我要显示的内容。

12 from IPython.display import displaydisplay(trans)

瀑布图的最大技巧是计算出底部堆叠条形图的内容。有关这一点,我从stackoverflow上的讨论中学到很多。

首先,我们得到累积和。

12345678 display(trans.amount.cumsum())sales           350000returns         320000credit fees     312500rebates         287500late charges    382500shipping        375500Name: amount, dtype: int64

这看起来不错,但我们需要将一个地方的数据转移到右边。

12 blank=trans.amount.cumsum().shift(1).fillna(0)display(blank)

1234567 sales                0returns         350000credit fees     320000rebates         312500late charges    287500shipping        382500Name: amount, dtype: float64

我们需要向trans和blank数据帧中添加一个净总量。

12345 total = trans.sum().amounttrans.

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...