![](/img/trans.png)
[英]Is it possible to use the same pipenv for both python2 and python3?
[英]When I use networkx.draw to draw the network, python2 and python3 use the same program, but python2 cannot draw correctly
当我使用networkx.draw
绘制网络时,使用与python2和python3相同的程序,但python2无法正确绘制。 左边是py3,右边是py2。
import scipy
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
N = [("n{}".format(i), 0) for i in range(1,7)] + \
[("n{}".format(i), 1) for i in range(7,13)] + \
[("n{}".format(i), 2) for i in range(13,19)]
E = [("n1","n2"), ("n1","n3"), ("n1","n5"),
("n2","n4"),
("n3","n6"), ("n3","n9"),
("n4","n5"), ("n4","n6"), ("n4","n8"),
("n5","n14"),
("n7","n8"), ("n7","n9"), ("n7","n11"),
("n8","n10"), ("n8","n11"), ("n8", "n12"),
("n9","n10"), ("n9","n14"),
("n10","n12"),
("n11","n18"),
("n13","n15"), ("n13","n16"), ("n13","n18"),
("n14","n16"), ("n14","n18"),
("n15","n16"), ("n15","n18"),
("n17","n18")]
G = nx.Graph()
print(list(map(lambda x: x[0], N)))
G.add_nodes_from(list(map(lambda x: x[0], N)))
G.add_edges_from(E)
ncolor = ['r']*6+['g']*6+['b']*6
nsize = [700] * 6 + [700] * 6 + [700] * 6
nx.draw(G, with_labels=True, font_weight='bold',
node_color=list(ncolor), node_size=nsize)
plt.savefig("graph.png")
plt.show()
对于早于 3.6 的 python,字典不维护插入顺序。 因此,您最终可能会将那些 colors 分配给不同的节点。 使用 nodelist 绘图时尝试强制执行nodelist
:
G = nx.Graph()
G.add_nodes_from(list(map(lambda x: x[0], N)))
G.add_edges_from(E)
ncolor = ['r']*6+['g']*6+['b']*6
nsize = [700] * 6 + [700] * 6 + [700] * 6
nodelist = [n[0] for n in N]
nx.draw(G, with_labels=True, font_weight='bold',
node_color=list(ncolor), node_size=nsize,
nodelist=nodelist)
plt.savefig("graph.png")
plt.show()
如果数字之间的差异只是颜色(并且肯定是定位),那么您可以尝试替换
ncolor = ['r']*6+['g']*6+['b']*6
具有以下内容:
color_dict = {"n{}".format(i): "r" for i in range(1, 7)}
color_dict.update({"n{}".format(i): "g" for i in range(7, 13)})
color_dict.update({"n{}".format(i): "b" for i in range(13, 19)})
ncolor = [color_dict[node] for node in G]
如果我没记错的话, python 2 中的dict
不一定保留添加元素的顺序。 因此,“n0”不需要是G
中的第一个元素。 在 python 3 中,他们开始保留顺序,因此您可以为所需的节点着色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.