Python數據可視化Pyecharts庫實現桑葚圖效果

首先介紹一下什麼是桑葚圖?

桑基圖(Sankey diagram),即桑基能量分流圖,也叫桑基能量平衡圖。

它是一種特定類型的流程圖,圖中延伸的分支的寬度對應數據流量的大小,通常應用於能源、材料成分、金融等數據的可視化分析。

因1898年Matthew Henry Phineas Riall Sankey繪制的“蒸汽機的能源效率圖”而聞名,此後便以其名字命名為“桑基圖”。

抓住桑葚圖的核心定義,是主要用語表現一個數據流的過程。其實,我們熟悉的Matplotlib中也可以畫出桑葚圖,可是看起來是不是有那麼一點點醜? 如下所示:

本篇使用另外一個常用的可視化庫pyecharts來畫圖。

這裡需要強調一下,pyecharts 分為v0.5.x 和 v1 兩個大版本,並且兩個版本是不兼容的。v 0.5.x 支持python2.7 和 3.4+ ,而v1 開始僅支持python 3.6+ ,在官方也分為兩個不同的文檔。

在網上對於v1 的資料和學習例子也非常多,本文就為還在使用v 0.5.x版本的同學,提供幫助。本篇之後的例子,使用v 0.5.x版本。官方文檔

 首先使用熟悉的pip進行安裝

pip install pyecharts

然後我們可以對照著官方文檔中的API介紹來學習,需要引入 Sankey。

核心參數不同,主要是對桑葚圖的一些展示的配置。

基本思路我總結大概有三步:

1. 先申明使用sankey

sankey = Sankey("桑基圖示例", width=1200, height=600)

2. 使用add 添加對sankey圖的配置信息

sankey.add(
    "sankey",
    nodes=j["nodes"],
    links=j["links"],
    line_opacity=0.2,
    line_curve=0.5,
    line_color="source",
    is_label_show=True,
    label_pos="right",
)

這裡需要註意,nodes和links是必須參數,相當於桑葚圖中的結點和連接的邊。需要傳入一個List數據,內嵌字典數據格式,如下所示。這裡的name、source、target和value都是固定的。

nodes = [
    {'name': 'category1'}, {'name': 'category2'}, {'name': 'category3'},
    {'name': 'category4'}, {'name': 'category5'}, {'name': 'category6'},
]
 
links = [
    {'source': 'category1', 'target': 'category2', 'value': 10},
    {'source': 'category2', 'target': 'category3', 'value': 15},
    {'source': 'category3', 'target': 'category4', 'value': 20},
    {'source': 'category5', 'target': 'category6', 'value': 25}
]

3. 最後render生成html文件展示

sankey.render()

 

最後給大傢分享一個小例子:

def sankey_analysis():
    nodes = [{'name':'Cluster 1'}, {'name':'Cluster 2'},{'name':'Cluster 3'},              
{'name':'Young'},{'name':'Medium'},{'name':'Elder'}]
     
    result = np.array([
                   [130,151,188],
                   [735,462,670],
                   [711,625,881]])
 
    targets = ['Young', 'Medium', 'Elder']    
    links = []
 
    for i in range(0,3):
        for j in range(0,3):
            sub_dict ={}
            sub_dict['source'] = 'Cluster '+str(i+1)
            sub_dict['target'] = targets[j]
            sub_dict['value'] = result[i,j]
            links.append(sub_dict)
            
    pic = (Sankey(name, width=1200, height=600).add('', nodes, links,
    sankey_node_width=80,
    sankey_node_gap=5, 
    line_opacity=0.7,
    line_curve=0.5,
    line_color='source',
    is_label_show=True,
    is_random = True,                                              
    label_text_size=14,                   
    label_pos="inside"))    
    pic.render('sankey.html')

參考資料:

1. https://05x-docs.pyecharts.org/#/zh-cn/prepare

以上就是Python數據可視化Pyecharts庫實現桑葚圖效果的詳細內容,更多關於Pyecharts庫實現桑葚圖的資料請關註WalkonNet其它相關文章!

推薦閱讀: