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