使用自定义标签和边尺寸从numpy矩阵创建交互式2D网络图

问题描述 投票:0回答:1

我有一个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)

enter image description here但这不是交互式的。我还试图用数组的实际标签(是字符串-例如,“一个”,“两个” ...“十个”)替换图形上的标签。最后,目标是使图形具有边,其中边的宽度是数组中的数字。

python numpy graph plotly networkx
1个回答
0
投票

您可以轻松自定义图形的可视化效果以符合上述要求。通过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

© www.soinside.com 2019 - 2024. All rights reserved.