NetworkX根据值放置节点

时间:2017-07-26 11:43:20

标签: matplotlib tree networkx

我是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值上

1 个答案:

答案 0 :(得分:0)

我不确定这个想法是否适合你,但你应该能够通过以下方式实现这一目标:

  • 手动调用布局算法
  • 修改职位
  • 带有修改位置的情节

以下是一个例子:

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进行了调整):

enter image description here