首頁技術文章正文

Python培訓之可視化技術:?;鶊D怎么做?

更新時間:2022-06-14 來源:黑馬程序員 瀏覽量:

  今天的Python培訓,我們主要講一下?;鶊D。?;鶊D亦稱為?;芰糠至鲌D、?;芰科胶鈭D,是一種特定類型的流程圖,用于展示數(shù)據(jù)的“流動”變化。?;鶊D中包含若干條從左到右延展的分支,每條分支的寬度代表著數(shù)據(jù)流量的大小,且所有主支寬度的總和等于所有分支寬度的總和,常見于能源、材料成分等場景或金融領域。

  matplotlib.sankey模塊中專門提供了表示?;鶊D的類Sankey,通過創(chuàng)建Sankey類的對象可以創(chuàng)建桑基圖,之后可以調用add()方法為?;鶊D添加一些配置選項,最后調用finish()方法完成?;鶊D的繪制。

  假設現(xiàn)在小明家日常生活的開支主要分為工資、副業(yè)、生活、購物、深造、運動、其他和買書幾類,且其中每項投入或產出值分別為0.7、0.3、-0.3、-0.1、-0.3、-0.1、-0.1、-0.1。

  下面結合這些日常生活開支的數(shù)據(jù)繪制一個桑基圖,示例代碼如下。

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]
# 流的標簽列表
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ù)標簽
           orientations=orientations,      # 標簽顯示的方向
           color="black",                  # 邊緣線條顏色
           fc="lightgreen",                # 填充顏色
           patchlabel="生活消費",           # 圖表中心的標簽
           alpha=0.7)                      # 透明度
# ?;鶊D繪制完成的對象
diagrams = sankey.finish()
diagrams[0].texts[4].set_color("r")   #將下標為4的數(shù)據(jù)標簽設為紅色
diagrams[0].texts[4].set_weight("bold")  #將下標為4的數(shù)據(jù)標簽設為字體加粗
diagrams[0].text.set_fontsize(20)        #將中心標簽的字體大小設為20
diagrams[0].text.set_fontweight("bold")  #將中心標簽的字體設為加粗
plt.title("日常生活開支的?;鶊D")
plt.show()

  運行程序,效果如圖8-18所示。

1655175484036_日常生活開支的?;鶊D.jpg

  圖8-18 日常生活開支的?;鶊D

  圖8-18中,?;鶊D的各個分支代表生活消費的每個選項,其中分支末端呈內凹形狀的分支代表收入的數(shù)據(jù),呈箭頭形狀的分支代表支出的數(shù)據(jù)。由圖8-18可知,工資和副業(yè)這2個選項代表的分支均屬于生活消費的收入數(shù)據(jù),其余選項的分支均屬于生活消費的支出數(shù)據(jù),且深造選項的支出最多。

分享到:
在線咨詢 我要報名
和我們在線交談!