0

我想使用全息视图和散景绘制由 networkx 生成的图形。Networkx 运行图形的优化,它似乎是绘图的一部分。当我将图表提供给全息视图时,图表看起来完全不同。我不确定会发生什么。我猜,边缘权重没有正确转移,或者没有进行优化。(jupyter 笔记本的代码)。

%pylab inline

import pandas as pd
import networkx as nx
import holoviews as hv

hv.extension('bokeh')
np.random.seed(111)
G=nx.Graph()
ndxs = [1,2,3,4]
G.add_nodes_from(ndxs)
G.add_weighted_edges_from([(1,2,0), (1,3,1), 
                           (1,4,-1), (2,4,1),
                           (2,3,-1), (3,4,10)])
nx.draw(G)
# or you set the random_state for the spring layout
# to make sure the figure is reproducible
nx.draw(G, nx.spring_layout(G, random_state=100))

自卫队

hv.extension('bokeh')
%opts Graph [width=400 height=400]
padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))
hv.Graph.from_networkx(G, nx.layout.circular_layout).redim.range(**padding)

在此处输入图像描述

使用全息视图/散景绘图时如何保存节点的位置?

4

2 回答 2

1

上面的示例使用nx.circular_layout如果更改为nx.spring_layout执行相同的优化并且绘图看起来相似。我不知道如何设置random_state

在此处输入图像描述

于 2018-05-20T00:50:30.357 回答
0

您可以仅将位置保存为变量,然后将其用于 nx 和 hv。例如:

position = nx.spring_layout(G, scale=2)
nx.draw(G,position)
hv.extension('bokeh')
%opts Graph [width=400 height=400]
padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))
hv.Graph.from_networkx(G, position).redim.range(**padding)

否则,使用随机种子位置的事实将不可能连续两次绘制完全相同的图形。

于 2018-10-02T13:49:16.310 回答