将 networkx 布局添加到全息图

add networkx layout to holoview graph

我在我的工作中应用了来自 this documentation 的 facebook 网络示例,以获取此代码:

    edges_df = pd.read_csv('rel.csv', delimiter= ";")
    nodes_df = pd.read_csv('monfichier.csv', delimiter= ";")

    padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))

    fb_nodes = hv.Dataset(nodes_df, 'index')
    fb_graph = hv.Graph((edges_df, fb_nodes)).redim.range(**padding)

    colors = ['#000000'] + hv.Cycle('Category20').values

    fb_graph.opts(color_index='age', show_frame=False,
                  xaxis=True, yaxis=True, node_size=10, edge_line_width=1, cmap=colors)

    renderer = hv.renderer('bokeh')

    plot = renderer.get_plot(fb_graph).state
    show(plot)

它工作正常。但是得到的网络是一个没有特定布局的图形(如附图所示)。我想像在 networkx 中那样指定网络布局。怎么做 ?

我发现,这条指令:

hv.Graph.from_networkx(G, nx.layout.spring_layout).opts(tools=['hover'])

但是我没有找到如何在我的代码中使用它,因为我的 G 已经是一个全息视图而不是一个 networkx 图。 你有什么建议吗?

HoloViews 中有一个名为 layout_nodes 的函数,它可以将 networkx(和其他)布局应用于现有图形:

N = 8
node_indices = np.arange(N)
source = np.zeros(N)
target = node_indices

padding = dict(x=(-1.2, 1.2), y=(-1.2, 1.2))

simple_graph = hv.Graph(((source, target),)).redim.range(**padding)
hv.element.graphs.layout_nodes(simple_graph, layout=nx.spring_layout)