私はnetworkxを使うためにPythonを学び始めました。私はいくつかのノード(ノード0)に根ざした階層を構築しようとしており、そのノードからの距離(ホップ)に応じて色を変更したい。私は次のコードを書いていますが、なぜ色が変わっていないのかわかりません!!あなたは問題を指摘していただけますか?Python networkx:ノードがカラーリストを取得していません
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.cm as cmx
import random
# initial values of rings in nodes
MAX_RING = 1000
class Node:
count = int(0)
tx_range = 3
def __init__(self, i):
Node.count+= 1
self.id = int(i)
self.ring = int(MAX_RING)
self.x_pos = int()
self.y_pos = int()
self.parent_list = list()
self.nbr_list = list()
self.color = float()
def addNbr(self, nbr):
self.nbr_list.append(nbr)
def createNodes(Nodes, pos, labels):
for i in range(num_of_nodes):
Nodes.append(Node(i))
Nodes[i].x_pos = random.randrange(net_width)
Nodes[i].y_pos = random.randrange(net_hieght)
pos[i] = (Nodes[i].x_pos, Nodes[i].y_pos)
labels[i] = i
def createEdges(Graph, Nodes, Edges):
for i in range(num_of_nodes):
for j in range(i + 1, num_of_nodes):
dist = ((Nodes[i].x_pos - Nodes[j].x_pos)**2 + (Nodes[i].y_pos - Nodes[j].y_pos)**2) ** 0.5
if dist <= Node.tx_range:
Graph.add_edge(i, j)
#Graph.add_edge(j, i)
Edges.append((i , j))
Nodes[i].addNbr(Nodes[j])
Nodes[j].addNbr(Nodes[i])
print("Edge added")
def createRings(G, Nodes, colors, VisEdges):
# Base station is node 0 and has ring 0
# find all nodes in current ring and check their neighbors to create the next ring
# next ring becomes current ring and repeat from previous step
current_ring = 0
current_node = Nodes[0]
current_node.ring = current_ring
# temporary set to travers all nodes initially contains the BS
N = [Nodes[0]]
while len(N) > 0:
node = N.pop(0)
for nbr in node.nbr_list:
# for each node check if it has a neighbor with ring less than MAX_RING
if nbr.ring > node.ring + 1:
if(nbr.ring != MAX_RING):
print('CHANGING PARENT')
nbr.ring = node.ring + 1
nbr.color = nbr.ring
N.append(nbr)
VisEdges.append((node.id, nbr.id))
for node in Nodes:
colors.insert(node.id, node.color)
def main():
Nodes = list()
Edges = list()
VisEdges = list()
pos = dict()
labels = {}
colors = []
G = nx.Graph()
createNodes(Nodes, pos, labels)
G.add_nodes_from(pos.keys())
createEdges(G, Nodes, Edges)
for n, p in pos.items():
G.node[n]['pos'] = p
createRings(G, Nodes, colors, VisEdges)
colors[0] = 1
for node in Nodes:
print('Node[',node.id,'] ring is ', node.ring, 'color is', colors[node.id])
nx.draw(G,pos, edgelist=VisEdges, nodelist=pos.keys() , node_colors=colors, cmap=cmx.get_cmap('Reds'),
vmin=0, vmax=max(colors))
nx.draw_networkx_labels(G,pos,labels,font_size=10)
plt.show()
num_of_nodes = 100
net_width = 15
net_hieght = 15
main()
ありがとう、私はそれを理解しようと一日を費やし、私はそれを見ることができませんでした!なぜそれがPythonインタプリタによって検出されなかったのですか? – osmak