桑椹图

  • 参考:

  • 代码实践

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    # 实际映射关系
    df = pd.DataFrame(
    [
        ['A', 'A', 'A', 'B', 'B', 'B'],
        ['a', 'b', 'c', 'a', 'b', 'c'],
        [50, 25, 25, 10, 50, 40]]
    
    )
    
    # 输出
    
    0     1   2
    0     A   a   50
    1     A   b   25
    2     A   c   25
    3     B   a   10
    4     B   b   50
    5     B   c   40
    
    # 绘制使用关系(转换后)
    df = pd.DataFrame(
    [
        [0, 0, 0, 1, 1, 1],
        [2, 3, 4, 2, 3, 4],
        [50, 25, 25, 10, 50, 40]]
    
    )
    # 节点名称到数字映射 A, B ---> [0, 1], a,b,c --->[2,3,4]
    df = df.T
    
    # 绘制
    data = go.Sankey(link={'source': df[0], 'target': df[1], 'value': df[2]}, 
              node={'label':list('AB') + list('abc'), 'pad':50, 'thickness':10})
    
    fig = go.Figure(data)
    fig.show()
    • 注意

      • 直接在 source 和 target 中使用 node 节点名称不能绘制出图像

与 Jupyter Notebook 兼容问题

  • 刷新页面,图像消失

    • 解决办法

      1
      2
      
      from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
      init_notebook_mode(connected=True)