Plotly 中的桑基图未显示任何图表

use*_*545 3 python pandas plotly

我试图以情节方式获得桑基图的一个简单示例。下面的代码显示了我想要做什么。

import pandas as pd
df = pd.DataFrame()
df['source'] = ['s1', 's2', 's3']
df['target'] = ['s2', 's3', 's4']
df['value'] = [2,2,1]
df['label'] = ['a','b','c']
df['color'] = ['rgba(31, 119, 180, 0.8)', 'rgba(31, 119, 180, 0.8)', 'rgba(31, 119, 180, 0.8)'] 'rgba(31, 119, 180, 0.8)']

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
from plotly.graph_objs import *
init_notebook_mode(connected=True)

trace1 = {
  "domain": {
     "x": [0, 1], 
     "y": [0, 1]
  }, 
"link": dict({
  #"label": ['stream 1', '', '', ''], 
  "source": df['source'].dropna(axis=0, how='any'),
  "target": df['target'].dropna(axis=0, how='any'),
  "value": df['value'].dropna(axis=0, how='any'),
  "color": df['color'].dropna(axis=0, how='any')
 }), 
"node": dict({
  "color": df['color'],
  "label": df['label'].dropna(axis=0, how='any'), 
  "line": {
     "color": "black", 
     "width": 0.5
 }, 
  "pad": 0.5, 
  "thickness": 15
  }), 
 "orientation": "h", 
 "type": "sankey", 
 "valueformat": ".0f", 
 "valuesuffix": "Ha"
}
data = Data([trace1])
layout = {
   "font": {"size": 10}, 

 }
fig = Figure(data=data, layout=layout)

iplot(fig, validate=False)
Run Code Online (Sandbox Code Playgroud)

但是,当我在 ipython 笔记本中运行此命令时,没有任何显示。我缺少什么?

gfh*_*tac 5

请记住,桑基图中的源和目标必须是数字而不是文本。在您的情况下,最好为链接和节点创建单独的对象。这是一个基于您的数据的示例:

import pandas as pd
df_links = pd.DataFrame()
df_links['source'] = [0, 1, 2]
df_links['target'] = [1, 2, 3]
df_links['value'] = [2, 2, 1]
df_links['color'] = ['rgba(31, 119, 180, 0.8)', 'rgba(31, 119, 180, 0.8)', 'rgba(31, 119, 180, 0.8)']
df_nodes = pd.DataFrame()
df_nodes['label'] = ['s1','s2','s3','s4']
df_nodes['color'] = ['rgba(31, 119, 180, 0.8)', 'rgba(31, 119, 180, 0.8)', 'rgba(31, 119, 180, 0.8)', 'rgba(31, 119, 180, 0.8)']
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
from plotly.graph_objs import *

init_notebook_mode(connected=True)

trace1 = {
  "domain": {
    "x": [0, 1], 
    "y": [0, 1]
  }, 
  "link": dict({
    #"label": ['stream 1', '', '', ''], 
    "source": df['source'].dropna(axis=0, how='any'),
    "target": df['target'].dropna(axis=0, how='any'),
    "value": df['value'].dropna(axis=0, how='any'),
    "color": df['color'].dropna(axis=0, how='any')
  }), 
  "node": dict({
    "color": df['color'].dropna(axis=0, how='any'),
    "label": df['label'].dropna(axis=0, how='any'), 
    "line": {
      "color": "black", 
      "width": 0.5
    }, 
    "pad": 0.5, 
    "thickness": 15
  }), 
  "orientation": "h", 
  "type": "sankey", 
  "valueformat": ".0f", 
  "valuesuffix": "Ha"
}

layout = {
   "font": {"size": 10}, 
}

fig = Figure(data=[trace1], layout=layout)
iplot(fig, validate=False)
Run Code Online (Sandbox Code Playgroud)

请注意,某些在线服务出于安全原因会阻止内联代码,因此请先在您自己的计算机上进行测试。