Spring networkx 中具有一些预定义位置的图形布局
Spring graph layout with some predefined positions in networkx
我正在使用 networkx 包和 python3 来布置一个简单的图形。如果我只是使用 spring 布局,结果就不会那么好(如果手动布局)。所以我的想法是固定一些节点的位置。目前我使用以下代码:
%matplotlib inline
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
G = nx.DiGraph()
G.add_path(['H0', 'S0', 'S1', 'S5', 'S6', 'S7', 'H3'], color='green')
G.add_path(['H5', 'S4', 'S3', 'S2', 'S1', 'S0', 'H1'], color='red')
G.add_path(['H2', 'S7', 'S6', 'S8', 'S3', 'S4', 'H4'], color='blue')
#explicitly set some positions to make the drawing nice
fixed_pos = {'S1':(-1,0),'S5':(0,0), 'S6':(1,0), 'S3':(0,1)}
fixed_nodes = fixed_pos.keys()
pos = nx.spring_layout(G, pos=fixed_pos, fixed = fixed_nodes, scale=3)
nx.draw_networkx(G,pos, font_size=10, font_family='sans-serif')
plt.show()
我得到的结果是这样的:
所以所有固定位置的节点都挤在0.5,0.5左右!谁能告诉我为什么会这样?
您的某个安装有一些奇怪的地方,或者您的代码有些不同 运行。
完全复制并粘贴您的代码后 (python2.7),我得到:
所以节点在您指定的位置。
我正在使用 networkx 包和 python3 来布置一个简单的图形。如果我只是使用 spring 布局,结果就不会那么好(如果手动布局)。所以我的想法是固定一些节点的位置。目前我使用以下代码:
%matplotlib inline
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
G = nx.DiGraph()
G.add_path(['H0', 'S0', 'S1', 'S5', 'S6', 'S7', 'H3'], color='green')
G.add_path(['H5', 'S4', 'S3', 'S2', 'S1', 'S0', 'H1'], color='red')
G.add_path(['H2', 'S7', 'S6', 'S8', 'S3', 'S4', 'H4'], color='blue')
#explicitly set some positions to make the drawing nice
fixed_pos = {'S1':(-1,0),'S5':(0,0), 'S6':(1,0), 'S3':(0,1)}
fixed_nodes = fixed_pos.keys()
pos = nx.spring_layout(G, pos=fixed_pos, fixed = fixed_nodes, scale=3)
nx.draw_networkx(G,pos, font_size=10, font_family='sans-serif')
plt.show()
我得到的结果是这样的:
所以所有固定位置的节点都挤在0.5,0.5左右!谁能告诉我为什么会这样?
您的某个安装有一些奇怪的地方,或者您的代码有些不同 运行。
完全复制并粘贴您的代码后 (python2.7),我得到:
所以节点在您指定的位置。