如何在Power BI或其他程序中创建只显示员工地点转移的桑基图?

0 投票
1 回答
29 浏览
提问于 2025-04-13 20:23

我想用下面表格中的信息来创建一个桑基图。我希望源位置(之前的位置)在图中有相同数量的目的地(新位置),这样每一行就能一对一地流动。现在我遇到的问题是,当我在 Power BI 中创建这个图表时,它会生成多个层次,比如一个位置会流向另一个位置,然后再流向另一个位置……比如从柏林到伦敦再到香港。这不是我想要的。有没有什么建议可以让我创建一个桑基图,让一个点只流向另一个点?我对使用哪个程序都没有意见。

在这里输入图片描述

1 个回答

1

我觉得桑基图可能不太适合这样设计。你可能会期待有多个相同的节点,这样会让图看起来很混乱,甚至可能看不懂(如果我理解你的意思的话)。

也许圆形流动图会更好?就是把桑基图做成一个圆圈的样子。

有一个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_namescol_names简化成只包含FromTo列中的城市,但我只是做了一个粗略的版本。你也可以让这个矩阵根据输入自动生成。

航班圆形流动图

撰写回答