Python 繪制桑基圖全面解析
大家好,我是執(zhí)念斬長河,一個剛剛學(xué)習(xí)python繪圖的學(xué)渣,今天愉快學(xué)習(xí)《python數(shù)據(jù)可視化》(黑馬程序員編著),其中的“繪制?;鶊D”內(nèi)容,我將其成功實現(xiàn),特此寫博文紀(jì)念一下。
桑基圖亦稱為?;芰糠至鲌D、?;芰科胶鈭D,是一種特定類型的流程圖,用于展示數(shù)據(jù)的“流動”變化。?;鶊D中包含若干條從左到右延展的分支,每條分支的寬度代表數(shù)據(jù)流量的大小。
題目再現(xiàn)
假設(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
題目拆解
我們需要繪畫出?;鶊D,首先知道創(chuàng)建?;鶊D的類.matplotlib.sankey模塊中專門提拱了表示桑基圖的類Sankey,通過創(chuàng)建Sankey類的對象可以創(chuàng)建?;鶊D,之后可以調(diào)用add()方法為?;鶊D添加一些配置選項,最后調(diào)用finish()方法完成?;鶊D的繪制.
創(chuàng)建桑基圖
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ù),則會創(chuàng)建一個新的坐標(biāo)軸
- scale:表示流量比例的因子,用于按比例調(diào)整分支的寬度
- unit:表示與流量相關(guān)的物理單位的字符串.若設(shè)為None,則不會做數(shù)量標(biāo)記
- gap:表示進入或離開頂部或底部的分支間距,默認(rèn)為0.25
添加桑基圖選項
Sankey類對象可以調(diào)用add()方法為?;鶊D添加數(shù)據(jù)流量、標(biāo)簽等選項
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:表示流的方向列表或用于所有流的單個方向,可以取值為0(從左側(cè)輸入、右側(cè)輸出)、1(從頂部到頂部)或-1(從底部到底部)
- labels:表示流的標(biāo)簽列表或用于所有流的單個標(biāo)簽
- trunklength:表示輸入組和輸出組的基之間的長度
返回?;鶊D繪制完成的對象
Sankey類對象在添加數(shù)據(jù)之后需要調(diào)用finish()方法完成繪制,并返回包含多個?;訄D列表,?;訄D包含以下字段.
- patch:表示桑基子圖的輪廓
- flows:表示流量值(輸入為正,輸出為負(fù))
- angles:表示箭頭角度的列表
- tips:表示流路徑的尖端或凹陷位置的數(shù)組,其中每一行是一個(x,y)
- text:表示中心標(biāo)簽的Text實例
- texts:表示流分支標(biāo)簽的Text實例
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 # 消費收入與支出數(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] # 創(chuàng)建Sankey類對象 sankey = Sankey() 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è)為字體標(biāo)簽 diagrams[0].text.set_fontsize(20) # 將中心標(biāo)簽的字體大小設(shè)為20 diagrams[0].text.set_fontweight("bold") # 將中心標(biāo)簽的字體設(shè)為加粗 plt.title('日常生活開支的?;鶊D') plt.show()
總結(jié)&后記
?;鶊D真好玩,感覺挺有趣的。
到此這篇關(guān)于Python 繪制?;鶊D全面解析的文章就介紹到這了,更多相關(guān)python 繪制?;鶊D內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。