更新時(shí)間:2022-06-14 來(lái)源:黑馬程序員 瀏覽量:
今天的Python培訓(xùn),我們主要講一下?;鶊D。?;鶊D亦稱(chēng)為?;芰糠至鲌D、?;芰科胶鈭D,是一種特定類(lèi)型的流程圖,用于展示數(shù)據(jù)的“流動(dòng)”變化。?;鶊D中包含若干條從左到右延展的分支,每條分支的寬度代表著數(shù)據(jù)流量的大小,且所有主支寬度的總和等于所有分支寬度的總和,常見(jiàn)于能源、材料成分等場(chǎng)景或金融領(lǐng)域。
matplotlib.sankey模塊中專(zhuān)門(mén)提供了表示?;鶊D的類(lèi)Sankey,通過(guò)創(chuàng)建Sankey類(lèi)的對(duì)象可以創(chuàng)建?;鶊D,之后可以調(diào)用add()方法為桑基圖添加一些配置選項(xiàng),最后調(diào)用finish()方法完成?;鶊D的繪制。
假設(shè)現(xiàn)在小明家日常生活的開(kāi)支主要分為工資、副業(yè)、生活、購(gòu)物、深造、運(yùn)動(dòng)、其他和買(mǎi)書(shū)幾類(lèi),且其中每項(xiàng)投入或產(chǎn)出值分別為0.7、0.3、-0.3、-0.1、-0.3、-0.1、-0.1、-0.1。
下面結(jié)合這些日常生活開(kāi)支的數(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)", "其他", "買(mǎi)書(shū)"] # 流的方向 orientations = [1, 1, 0, -1, 1, -1, 1, 0] sankey = Sankey() # 為桑基圖添加數(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) # 透明度 # ?;鶊D繪制完成的對(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("日常生活開(kāi)支的?;鶊D") plt.show()
運(yùn)行程序,效果如圖8-18所示。
圖8-18 日常生活開(kāi)支的?;鶊D
圖8-18中,?;鶊D的各個(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)的支出最多。