介绍
对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具。不足为奇的是,我们可以使用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图。
设置我们想画出瀑布图的数据,并将其加载到数据帧(DataFrame)中。 数据需要以你的起始值开始,但是你需要给出最终的总数。我们将在下面计算它。
我使用了IPython中便捷的display函数来更简单地控制我要显示的内容。
瀑布图的最大技巧是计算出底部堆叠条形图的内容。有关这一点,我从stackoverflow上的讨论中学到很多。 首先,我们得到累积和。
这看起来不错,但我们需要将一个地方的数据转移到右边。
我们需要向trans和blank数据帧中添加一个净总量。
|