更新時(shí)間:2022-06-14 來(lái)源:黑馬程序員 瀏覽量:
今天的Python培訓(xùn),我們主要講一下?;鶊D。桑基圖亦稱為?;芰糠至鲌D、桑基能量平衡圖,是一種特定類型的流程圖,用于展示數(shù)據(jù)的“流動(dòng)”變化。?;鶊D中包含若干條從左到右延展的分支,每條分支的寬度代表著數(shù)據(jù)流量的大小,且所有主支寬度的總和等于所有分支寬度的總和,常見于能源、材料成分等場(chǎng)景或金融領(lǐng)域。
matplotlib.sankey模塊中專門提供了表示桑基圖的類Sankey,通過(guò)創(chuàng)建Sankey類的對(duì)象可以創(chuàng)建桑基圖,之后可以調(diào)用add()方法為桑基圖添加一些配置選項(xiàng),最后調(diào)用finish()方法完成?;鶊D的繪制。
假設(shè)現(xiàn)在小明家日常生活的開支主要分為工資、副業(yè)、生活、購(gòu)物、深造、運(yùn)動(dòng)、其他和買書幾類,且其中每項(xiàng)投入或產(chǎn)出值分別為0.7、0.3、-0.3、-0.1、-0.3、-0.1、-0.1、-0.1。
下面結(jié)合這些日常生活開支的數(shù)據(jù)繪制一個(gè)桑基圖,示例代碼如下。
import matplotlib.pyplot as plt from matplotlib.sankey import Sankey plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 消費(fèi)收入與支出數(shù)據(jù) flows = [0.7, 0.3, -0.3, -0.1, -0.3, -0.1, -0.1, -0.1] # 流的標(biāo)簽列表 labels = ["工資", "副業(yè)", "生活", "購(gòu)物", "深造", "運(yùn)動(dòng)", "其他", "買書"] # 流的方向 orientations = [1, 1, 0, -1, 1, -1, 1, 0] sankey = Sankey() # 為?;鶊D添加數(shù)據(jù) sankey.add(flows=flows, # 收入與支出數(shù)據(jù) labels=labels, # 數(shù)據(jù)標(biāo)簽 orientations=orientations, # 標(biāo)簽顯示的方向 color="black", # 邊緣線條顏色 fc="lightgreen", # 填充顏色 patchlabel="生活消費(fèi)", # 圖表中心的標(biāo)簽 alpha=0.7) # 透明度 # 桑基圖繪制完成的對(duì)象 diagrams = sankey.finish() diagrams[0].texts[4].set_color("r") #將下標(biāo)為4的數(shù)據(jù)標(biāo)簽設(shè)為紅色 diagrams[0].texts[4].set_weight("bold") #將下標(biāo)為4的數(shù)據(jù)標(biāo)簽設(shè)為字體加粗 diagrams[0].text.set_fontsize(20) #將中心標(biāo)簽的字體大小設(shè)為20 diagrams[0].text.set_fontweight("bold") #將中心標(biāo)簽的字體設(shè)為加粗 plt.title("日常生活開支的?;鶊D") plt.show()
運(yùn)行程序,效果如圖8-18所示。
圖8-18 日常生活開支的?;鶊D
圖8-18中,桑基圖的各個(gè)分支代表生活消費(fèi)的每個(gè)選項(xiàng),其中分支末端呈內(nèi)凹形狀的分支代表收入的數(shù)據(jù),呈箭頭形狀的分支代表支出的數(shù)據(jù)。由圖8-18可知,工資和副業(yè)這2個(gè)選項(xiàng)代表的分支均屬于生活消費(fèi)的收入數(shù)據(jù),其余選項(xiàng)的分支均屬于生活消費(fèi)的支出數(shù)據(jù),且深造選項(xiàng)的支出最多。