NetworkX 根据价值放置节点
NetworkX place nodes based on value
我是 networkX 的新手,我正在尝试找到一种方法,以便我可以根据代表 Y 轴上的值的值来定位节点,而无需更改使树看起来不错的节点的随机 X 值
使用这些节点:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.Graph()
G.add_node(430, value = 1)
G.add_node(230, value = -1)
G.add_node(220, value = 0)
G.add_node(210, value = -1)
G.add_node(10, value = 1)
G.add_edge(430,220)
G.add_edge(10,220)
G.add_edge(210,220)
G.add_edge(230,220)
nx.draw_networkx(G)
plt.show()
结果应该是一个 "X",每次我 运行 代码
时,所有 5 个节点都在这些特定的 3 个 y 值上
我不确定这个想法是否适合你,但你应该可以通过以下方式实现:
- 手动调用布局算法
- 修改位置
- 修改位置的绘图
这是一个例子:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.Graph()
G.add_node(430, value = 1)
G.add_node(230, value = -1)
G.add_node(220, value = 0)
G.add_node(210, value = -1)
G.add_node(10, value = 1)
G.add_edge(430,220)
G.add_edge(10,220)
G.add_edge(210,220)
G.add_edge(230,220)
pos=nx.spring_layout(G) # default layout like in your code
other_y = nx.get_node_attributes(G, 'value')
for node, node_pos in pos.items():
if node in other_y.keys():
pos_ = pos[node]
pos_[1] = other_y[node]
pos[node] = pos_
f, arr = plt.subplots(2)
nx.draw_networkx(G, ax=arr[0])
arr[0].set_title('default layout')
nx.draw_networkx(G, pos=pos, ax=arr[1])
arr[1].set_title('partially y-modified')
plt.show()
输出(警告:可能针对 python 3 进行调整):
我是 networkX 的新手,我正在尝试找到一种方法,以便我可以根据代表 Y 轴上的值的值来定位节点,而无需更改使树看起来不错的节点的随机 X 值
使用这些节点:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.Graph()
G.add_node(430, value = 1)
G.add_node(230, value = -1)
G.add_node(220, value = 0)
G.add_node(210, value = -1)
G.add_node(10, value = 1)
G.add_edge(430,220)
G.add_edge(10,220)
G.add_edge(210,220)
G.add_edge(230,220)
nx.draw_networkx(G)
plt.show()
结果应该是一个 "X",每次我 运行 代码
时,所有 5 个节点都在这些特定的 3 个 y 值上我不确定这个想法是否适合你,但你应该可以通过以下方式实现:
- 手动调用布局算法
- 修改位置
- 修改位置的绘图
这是一个例子:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.Graph()
G.add_node(430, value = 1)
G.add_node(230, value = -1)
G.add_node(220, value = 0)
G.add_node(210, value = -1)
G.add_node(10, value = 1)
G.add_edge(430,220)
G.add_edge(10,220)
G.add_edge(210,220)
G.add_edge(230,220)
pos=nx.spring_layout(G) # default layout like in your code
other_y = nx.get_node_attributes(G, 'value')
for node, node_pos in pos.items():
if node in other_y.keys():
pos_ = pos[node]
pos_[1] = other_y[node]
pos[node] = pos_
f, arr = plt.subplots(2)
nx.draw_networkx(G, ax=arr[0])
arr[0].set_title('default layout')
nx.draw_networkx(G, pos=pos, ax=arr[1])
arr[1].set_title('partially y-modified')
plt.show()
输出(警告:可能针对 python 3 进行调整):