def draw(G, karmas):
def get_root(G):
for x in G.nodes():
if len(G.predecessors(x)) == 0:
return x
return None
def gen_node_size(karma):
if karma == "RO" or karma == "DA":
return 1
else:
return max(1, math.sqrt(abs(float(karma))))
def gen_node_sizes(karmas, nodes):
return [20 * gen_node_size(karmas[n]) for n in nodes]
def gen_node_color(karma):
if karma == "RO":
return "darkgray"
elif karma == "DA":
return "darkgray"
elif float(karma) > 0:
return "green"
elif float(karma) < 0:
return "red"
else:
return "blue"
def gen_node_colors(karmas, nodes):
return [gen_node_color(karmas[n]) for n in nodes]
def gen_node_labels(karmas, G):
ranks = []
root = get_root(G)
for n in G.nodes():
r = len(G.successors(n)) * 10
if karmas[n] != "RO" and karmas[n] != "DA":
r += abs(float(karmas[n]))
if n == root:
r += 1000
ranks.append([n, r])
return dict((p[0], p[0]) for p in sorted(ranks, key=lambda p: p[1], reverse=True)[0:MAX_NUM_OF_LABELS])
nx.draw(G,
nx.graphviz_layout(G, prog="neato", root=get_root(G)),
node_size=gen_node_sizes(karmas, G.nodes()),
node_color=gen_node_colors(karmas, G.nodes()),
arrows=True,
labels=gen_node_labels(karmas, G),
with_labels=True,
font_size="10",
edge_color="lightgrey",
linewidths=0)
评论列表
文章目录