www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > AI科技大本營(yíng)
[導(dǎo)讀]作者|黃偉呢來(lái)源|數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)之美簡(jiǎn)介瀑布圖,由麥肯錫顧問(wèn)公司所獨(dú)創(chuàng)的圖表類(lèi)型,因?yàn)樾嗡破俨剂魉员淮蠹曳Q(chēng)之為瀑布圖(WaterfallPlot),在企業(yè)經(jīng)營(yíng)分析、財(cái)務(wù)分析中使用較多,用以表示企業(yè)成本的構(gòu)成、變化等情況。瀑布圖本質(zhì):堆積柱形圖的繪制。瀑布圖的繪圖原理那么,...


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


作者|黃偉呢


來(lái)源|數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)之美


簡(jiǎn)介

瀑布圖,由麥肯錫顧問(wèn)公司所獨(dú)創(chuàng)的圖表類(lèi)型,因?yàn)樾嗡破俨剂魉?,所以被大家稱(chēng)之為瀑布圖(Waterfall Plot),在企業(yè)經(jīng)營(yíng)分析、財(cái)務(wù)分析中使用較多,用以表示企業(yè)成本的構(gòu)成、變化等情況。


瀑布圖本質(zhì):堆積柱形圖的繪制。


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


瀑布圖的繪圖原理

那么,如何用Python繪制這樣一個(gè)瀑布圖呢?


很多人不知道如何繪制瀑布圖,是由于對(duì)瀑布圖的繪圖原理,不夠清楚。


因此,這里先來(lái)講述一下瀑布圖的繪圖原理。


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


有這樣一份原始數(shù)據(jù):


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


從最開(kāi)始的銷(xiāo)售,經(jīng)過(guò)退貨、信用費(fèi)、回扣、滯納金、運(yùn)費(fèi),這一系列的操作后,最后肯定還有一個(gè)凈總量。因此,我們需要添加這樣一行。


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


注意:在瀑布圖中,最初的“銷(xiāo)售”與最后的“凈總量”,都是以坐標(biāo)軸原點(diǎn)為起點(diǎn)。


瀑布圖本身就是要體現(xiàn)這個(gè)增減變動(dòng)過(guò)程。因此,這里涉及到一個(gè)占位,如圖所示:


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


除了首尾兩個(gè)字段,都是以原點(diǎn)起步的,中間過(guò)程要體現(xiàn)這個(gè)波動(dòng)過(guò)程。我特意用不同顏色,為大家圈出了這個(gè)占位的高度,但是在瀑布圖中,我們并不顯示出來(lái)。


文章最開(kāi)始就說(shuō)了,瀑布圖的本質(zhì)其實(shí)就是堆積的柱形圖。


為了構(gòu)造這個(gè)占位數(shù)據(jù),我們需要對(duì)數(shù)據(jù)進(jìn)行一定的處理。讓首尾字段的數(shù)據(jù)都為0,中間部分,表示占位高度。


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


最后,我們利用原始數(shù)據(jù)與占位高度數(shù)據(jù),做一個(gè)堆疊的柱形圖,就可以展示出這個(gè)瀑布效果了。


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


瀑布圖的繪圖步驟

現(xiàn)在我就為大家講解詳細(xì)的步驟。


1. 導(dǎo)入相關(guān)庫(kù)

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


2.  創(chuàng)建數(shù)據(jù)

index = ['銷(xiāo)售','退貨','信用費(fèi)','回扣','滯納金','運(yùn)費(fèi)']
data = {'金額': [350000,-30000,-7500,-25000,95000,-7000]}
df = pd.DataFrame(data=data,index=index)
df


結(jié)果如下:


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


瀑布圖的最大問(wèn)題就是弄清楚,底部堆積的條形圖應(yīng)該是什么。


首先,先求累積和。


df["金額"].cumsum()


結(jié)果如下:


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


原理部分,已經(jīng)為大家講述過(guò),瀑布圖 = 原始數(shù)據(jù) 占位數(shù)據(jù),堆積而成。


因此,對(duì)于占位數(shù)據(jù),它的首位數(shù)據(jù),我們必須將其變?yōu)?.


total = df.sum()["金額"]
df.loc["凈總量"] = total
blank = df["金額"].cumsum().shift(1).fillna(0)
blank.loc["凈總量"] = total
blank.loc["凈總量"] = 0


結(jié)果如下


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


其實(shí),一行Python代碼,就可以完成瀑布圖的繪制。


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

plt.xticks(rotation=60)
plt.ylim(-100000,400000)
plt.grid()


結(jié)果如下:


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


其實(shí),到這里瀑布圖的繪制已經(jīng)結(jié)束了。但是,為了是這個(gè)增減變動(dòng)更加清楚,我們可以添加一個(gè)階梯。


# 多添加一個(gè)繪圖代碼
step = blank.reset_index(drop=True).repeat(3).shift(-1)
step[1::3] = np.nan

my_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()


結(jié)果如下:


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


值得注意的問(wèn)題

在下面這行代碼中,有一個(gè)bottom參數(shù)。


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


其實(shí)該參數(shù),表示的是堆積柱形圖的起始點(diǎn),如果數(shù)據(jù)為正,則柱子在該起始點(diǎn)之上,如果數(shù)據(jù)為負(fù),則柱子在該起始點(diǎn)之下。


我們?yōu)榇蠹遗e例說(shuō)明:


import numpy as np
import matplotlib.pyplot as plt

x = 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()


結(jié)果如下:


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!


觀察上圖,我為大家標(biāo)注好了起始點(diǎn),如果數(shù)據(jù)為正,柱子都是朝上,否則就朝下。


簡(jiǎn)介 原理 繪制,詳解?Python「瀑布圖」的整個(gè)制作流程!



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉