我有一个numpy数组:
[[12, 1, 5, 2, 2, 2, 1, 3, 1, 2],
[ 1, 10, 3, 2, 1, 7, 2, 6, 1, 0],
[ 5, 3, 26, 5, 1, 5, 2, 11, 3, 5],
[ 2, 2, 5, 11, 1, 2, 1, 7, 2, 4],
[ 2, 1, 1, 1, 17, 2, 1, 6, 2, 2],
[ 2, 7, 5, 2, 2, 22, 12, 8, 1, 0],
[ 1, 2, 2, 1, 1, 12, 21, 7, 0, 1],
[ 3, 6, 11, 7, 6, 8, 7, 23, 0, 5],
[ 1, 1, 3, 2, 2, 1, 0, 0, 3, 1],
[ 2, 0, 5, 4, 2, 0, 1, 5, 1, 4]]
我正在尝试在页面底部(仅2D)创建2D网络图,例如this-。我发现了一个名为networkx
的库,该库具有一个非常简单的功能,可以从numpy数组创建2D图形:
import networkx as nx
G = nx.from_numpy_matrix(array)
nx.draw(G, with_labels=1)
但这不是交互式的。我还试图用数组的实际标签(是字符串-例如,“一个”,“两个” ...“十个”)替换图形上的标签。最后,目标是使图形具有边,其中边的宽度是数组中的数字。
您可以轻松自定义图形的可视化效果以符合上述要求。通过nx.draw
,您可以更改可视化的大多数可用选项。尽管在某些情况下,您可能需要使用nx.draw
中可用的其他选项,例如Drawing等,以进一步自定义可视化。
在这种情况下,假设您有一个要设置标签名称的类数组,可以使用nx. draw_networkx_nodes
并使用字典指定标签的映射,您可以将其定义为:
nx. draw_networkx_nodes
请注意,通过使用nx.draw_networkx_labels
,将数组中的实际值设置为边缘nx.draw_networkx_labels
,因此您可以使用G = nx.from_numpy_matrix(a)
nodelist = G.nodes()
num_words = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine']
d_labels = dict(zip(nodelist, num_words))
获得相应的边缘宽度。
nx.from_numpy_matrix
以后可以通过widths
参数在nx.get_edge_attributes
中设置宽度。最后,关于使图具有交互性,您可以查看widths = nx.get_edge_attributes(G, 'weight')
。
将它们放在一起,我们可以将图形绘制为:
nx.draw_networkx_edges
nx.draw_networkx_edges