我想使用下表中的信息创建桑基图。我希望源位置(先前位置)在图中具有相同数量的目的地(新位置),以便每行只有一对一的流程。我遇到的问题是,当我在 power bi 中创建此图表时,它会在 power bi 中创建多个图层,其中一个位置将进入另一个位置,另一个位置将进入另一个位置......即柏林到伦敦到香港。这不是我想要的。关于如何创建一个桑基图,其中一个点流向另一个点,有什么建议吗?我不介意这是在哪个程序中完成的。
我不相信桑基图仅仅通过设计就可以这样工作。您会期望节点的多个副本,这会使绘图混乱到可能无法读取的程度(如果我理解您的请求)。
也许圆形流程图更好?基本上是一个圆圈中的桑基。
有一个 python 库,如下所示
pip install pycirclize
import pandas as pd
from pycirclize import Circos
cities = [
"London",
"Milan",
"Tokyo",
"Brussels",
"Berlin",
"Riyadh",
"Shanghai",
"Hong Kong",
"Seoul",
"Dubai",
"New York",
"Sydney",
"Singapore",
"Brisbane",
"Melbourne",
"Kuala Lumpur",
"Perth",
]
# create route matrix
row_names = cities
col_names = cities
matrix_data = [
[0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
]
matrix_df = pd.DataFrame(matrix_data, index=row_names, columns=col_names)
# Initialize Circos from matrix for plotting Chord Diagram
circos = Circos.initialize_from_matrix(
matrix_df,
space=5,
cmap="tab10",
label_kws=dict(size=12),
link_kws=dict(ec="black", lw=0.5, direction=1),
)
circos.savefig("circlize_plot.png")
您可以将
row_names
和 col_names
简化为仅分别出现在 From
和 To
列中的城市,但我只是做了一个粗略的版本。您还可以自动根据输入构建此矩阵。