(Python)Networkx-定义自己的pos词典 [英] (Python) Networkx - Define own pos dictionary

查看:559
本文介绍了(Python)Networkx-定义自己的pos词典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码是这样的:

for x in xrange(5):
    G.add_edge('sIP:\n'+mostfrequent[x][0], countermfi[x])
    G.add_edge('dIP:\n'+mostfrequent[x][1], countermfi[x])
    G.add_edge('sPort:\n'+mostfrequent[x][2], countermfi[x])
    G.add_edge('dPort:\n'+mostfrequent[x][3], countermfi[x])
    G.add_edge('Protocol:\n'+mostfrequent[x][4], countermfi[x])
    G.add_edge('Packets:\n'+mostfrequent[x][5], countermfi[x])
    G.add_edge('Bytes:\n'+mostfrequent[x][6], countermfi[x])


pos = nx.kamada_kawai_layout(G)  # positions for all nodes

#Hyperedges
nx.draw_networkx_nodes(G, pos, nodelist=countermfi, node_size=node_size, node_color='red', node_shape='s', alpha=1)             

#Nodes          
nx.draw_networkx_nodes(G, pos, nodelist=flattened_list_nodes, node_size=1600, node_color='blue', alpha=0.6)             

#Edges
nx.draw_networkx_edges(G, pos, edgelist=G.edges(), width=2)

#Labels
nx.draw_networkx_labels(G, pos, font_size=11, font_family='sans-serif')
plt.axis('off')
plt.show()

我的打印G.nodes(data = True)输出是:

My output of print G.nodes(data=True) is:

[('Bytes:\n620', {}), ('dIP:\n178.237.19.228', {}), ('sPort:\n2049', {}), ('sPort:\n60179', {}), ('sIP:\n16.37.97.29', {}), (153, {}), ('dPort:\n443', {}), ('dPort:\n80', {}), ('Packets:\n2', {}), ('Packets:\n1', {}), ('sPort:\n44492', {}), ('Bytes:\n100', {}), ('sIP:\n16.37.93.196', {}), ('dIP:\n178.237.17.97', {}), (188, {}), ('dIP:\n16.37.157.74', {}), ('sIP:\n16.37.97.222', {}), ('dIP:\n178.237.17.61', {}), ('sIP:\n16.37.97.17', {}), ('Bytes:\n46', {}), (224, {}), (227, {}), ('dPort:\n691', {}), ('dIP:\n104.131.44.62', {}), ('sPort:\n55177', {}), ('Protocol:\n6', {}), (120, {}), ('sPort:\n56326', {})]

我在使用nx.kamada_kawai_layout时遇到问题,因为出现错误:

I have a problem with using nx.kamada_kawai_layout, because i get an error:

raise nx.NetworkXError('Node %s has no position.' % e)
networkx.exception.NetworkXError: Node '16.37.97.17' has no position.

如何解决此问题或为40个节点中的每个节点设置自己的pos?

How can i fix this or set my own pos for every of the 40 nodes?

预先感谢您, 问候:)

Thank you in advance, Greetings :)

推荐答案

基于您的

Based on your other question, your problem is that the node '16.37.97.17' that appears in flattened_list_nodes is not a node in the graph. When you added the edges, you appended the node name with some text. So you added the node 'sIP:\n16.37.97.17'

然后,您要求networkx绘制节点'16.37.97.17',但这不是图形的一部分,因此,pos没有位置.因此它将失败.您需要在将节点添加到图中之前不更改其名称,或者在您的nodelist中使用更改后的名称.

Then you ask networkx to plot the node '16.37.97.17', but that isn't part of the graph and because of that, pos doesn't have a position for it. So it's going to fail. You need to either not change the name of the node before adding it to the graph, or use the changed name in your nodelist.

即使为该节点定义位置,由于该节点不在图中,它仍将无法绘制.

Even if you define a position for that node, it will still fail to plot because the node isn't in the graph.

这篇关于(Python)Networkx-定义自己的pos词典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆