溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python如何繪制桑基圖

發(fā)布時(shí)間:2021-09-24 11:14:38 來源:億速云 閱讀:199 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Python如何繪制?;鶊D,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

?;鶊D亦稱為桑基能量分流圖、?;芰科胶鈭D,是一種特定類型的流程圖,用于展示數(shù)據(jù)的“流動(dòng)”變化。桑基圖中包含若干條從左到右延展的分支,每條分支的寬度代表數(shù)據(jù)流量的大小。

題目再現(xiàn)

假設(shè)現(xiàn)在小明家日常生活的開支主要分為工資、副業(yè)、生活、購物、深造、運(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è)?;鶊D

Python如何繪制桑基圖

題目拆解

我們需要繪畫出?;鶊D,首先知道創(chuàng)建?;鶊D的類.matplotlib.sankey模塊中專門提拱了表示?;鶊D的類Sankey,通過創(chuàng)建Sankey類的對(duì)象可以創(chuàng)建桑基圖,之后可以調(diào)用add()方法為?;鶊D添加一些配置選項(xiàng),最后調(diào)用finish()方法完成?;鶊D的繪制.

創(chuàng)建?;鶊D

Sankey(ax=None, scale=1.0,unit='',format='%G',gap=0.25,radius=0.1,shoulder=0.03,
offset=0.15,head_angle=100,margin=0.4,tolerance=1e-06,**kwargs)

常用函數(shù)參數(shù)如下:

  • ax:若不提供該參數(shù),則會(huì)創(chuàng)建一個(gè)新的坐標(biāo)軸

  • scale:表示流量比例的因子,用于按比例調(diào)整分支的寬度

  • unit:表示與流量相關(guān)的物理單位的字符串.若設(shè)為None,則不會(huì)做數(shù)量標(biāo)記

  • gap:表示進(jìn)入或離開頂部或底部的分支間距,默認(rèn)為0.25

添加桑基圖選項(xiàng)

Sankey類對(duì)象可以調(diào)用add()方法為?;鶊D添加數(shù)據(jù)流量、標(biāo)簽等選項(xiàng)

add(self,patchlabel='',flows=None,orientations=None,labels='',
trunklength=1.0, pathlengths=0.25,prior=None,connect=(0,0),
rotation=0,**kwargs)

常用參數(shù)如下:

  • patchlabel:表示位于圖表中心的標(biāo)簽

  • flows:表示流量數(shù)據(jù)數(shù)組,其中投入數(shù)據(jù)為正值,產(chǎn)生數(shù)據(jù)為負(fù)值。

  • orientations:表示流的方向列表或用于所有流的單個(gè)方向,可以取值為0(從左側(cè)輸入、右側(cè)輸出)、1(從頂部到頂部)或-1(從底部到底部)

  • labels:表示流的標(biāo)簽列表或用于所有流的單個(gè)標(biāo)簽

  • trunklength:表示輸入組和輸出組的基之間的長度

返回?;鶊D繪制完成的對(duì)象

Sankey類對(duì)象在添加數(shù)據(jù)之后需要調(diào)用finish()方法完成繪制,并返回包含多個(gè)?;訄D列表,桑基子圖包含以下字段.

  • patch:表示?;訄D的輪廓

  • flows:表示流量值(輸入為正,輸出為負(fù))

  • angles:表示箭頭角度的列表

  • tips:表示流路徑的尖端或凹陷位置的數(shù)組,其中每一行是一個(gè)(x,y)

  • text:表示中心標(biāo)簽的Text實(shí)例

  • texts:表示流分支標(biāo)簽的Text實(shí)例

3.完整源碼

if __name__ == '__main__':
    import numpy as np
    import pandas as pd
    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è)","生活","購物","深造","運(yùn)動(dòng)","其他","買書"]
    # 流的方向
    orientations = [1,1,0,-1,1,-1,1,0]
    # 創(chuàng)建Sankey類對(duì)象
    sankey = Sankey()
    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è)為字體標(biāo)簽
    diagrams[0].text.set_fontsize(20)     # 將中心標(biāo)簽的字體大小設(shè)為20
    diagrams[0].text.set_fontweight("bold") # 將中心標(biāo)簽的字體設(shè)為加粗
    plt.title('日常生活開支的桑基圖')
    plt.show()

以上是“Python如何繪制?;鶊D”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI