如何对 Sankey 图中的节点进行排序Plotly

问题描述

我想实现一种可视化,显示一种状态到另一种状态之间的变化频率,将这些状态表示为数字。 My data looks like this调用 df_sankey

我正在考虑按照 documentation 中的示例绘制桑基图。所以我想要一列状态 A 为 I1,I2,...,I20 和另一列状态 B 为 F1,F2,F20。然后每对值之间的频率将表示为加权线as follows

但是,我无法根据状态数对列中的节点进行排序。 This is what I want to achieve.

这是我尝试过的:

#Create Labels
source = pd.DataFrame(np.arange(1,21),columns = ['source'])['source'].apply(lambda x: 'I' + str(x))
target = pd.DataFrame(np.arange(1,columns = ['target'])['target'].apply(lambda x: 'F' + str(x))
labels = pd.concat([source,target],axis=0).reset_index(drop=True)

#X-node
x_node = np.concatenate((np.ones(int(len(source)))*0.1,np.ones(int(len(target)))),axis = None)

#Y-node
y_node = np.tile(np.linspace(0,100,len(source)),2)

#Create Dataframe
df_nodes = pd.DataFrame(data = {'label': labels,'X': x_node,'Y': y_node})

#PLOT

fig = go.figure(data=[go.Sankey(
    arrangement='snap',node = dict(
      pad = 15,thickness = 20,line = dict(color = "black",width = 0.5),label = df_nodes['label'],color = "blue",x = df_nodes['X'],y = df_nodes['Y']
    ),link = dict(
      source = df_sankey['State_A']-1,#Indices correspond to labels,eg A1,A2,A1,B1,...
      target = df_sankey['State_B']+20-1,value = df_sankey['Freq']
  ))])

fig.update_layout(title_text="Basic Sankey Diagram",font_size=10)
fig.show()

有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...