如何绘制具有不同大小节点的图形Networkx

2024-04-16 20:17:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我用节点间链接的权重计算节点的度中心。 下一个任务是绘制一个包含不同大小节点的图形。例如,如果度中心性>;4,节点大小=1500,如果<;4 = 500. 帮助了解错误所在

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np

A = [[0, 1.51, 0, 1.71, 0],
     [0, 0, 2.11, 1.81, 2.31],
     [0, 0, 0, 1.31, 1.41],
     [0, 0, 0, 0, 1.11],
     [0, 0, 0, 0, 0]]

G = nx.from_numpy_matrix(np.matrix(A), create_using=nx.DiGraph)

layout = nx.spring_layout(G)
labels = nx.get_edge_attributes(G, "weight")


# a list of the node labels in the right order
raw_labels = ["A1", "K2", "D3", "E4", "Z30"]
lab_node = dict(zip(G.nodes, raw_labels))

print("Degree centrality weight")
d = G.degree(weight='weight')
print(d)

for x in d:
    if x[1] > 4:
        large = x
        print (large)
    else:
        small = x
        print (small)

nx.draw(G, layout)
nx.draw_networkx_nodes(G, layout, edgelist=large, node_size=100)
nx.draw_networkx_nodes(G, layout, edgelist=small, node_size=1500)
nx.draw_networkx_edge_labels(G, layout, edge_labels=labels)
nx.draw_networkx_labels(G, layout, labels=lab_node, font_size=10, font_family='sans-serif')
plt.show()

Tags: importnetworkxnodelabels节点assmallnodes
1条回答
网友
1楼 · 发布于 2024-04-16 20:17:54

下面的代码可以工作。在您的代码中有一些问题:首先,就像Joel在注释中提出的那样,您使用了smalllarge作为变量,但希望将它们列为列表。其次,在^{}中使用了edgelist而不是nodelist。 我将nx.draw替换为nx.draw_networkx_edges(并添加了plt.axis("off")),以允许其他用户绘制比默认大小更小或更大的节点大小,因为较小的大小不适用于nx.draw

作为最后一个个人建议,我将用较长的自解释名称替换变量名,如dG、或small,如node_degreesgraphnode_with_low_degrees

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np

A = [[0, 1.51, 0, 1.71, 0],
     [0, 0, 2.11, 1.81, 2.31],
     [0, 0, 0, 1.31, 1.41],
     [0, 0, 0, 0, 1.11],
     [0, 0, 0, 0, 0]]

G = nx.from_numpy_matrix(np.matrix(A), create_using=nx.DiGraph)

layout = nx.spring_layout(G)
labels = nx.get_edge_attributes(G, "weight")


# a list of the node labels in the right order
raw_labels = ["A1", "K2", "D3", "E4", "Z30"]
lab_node = dict(zip(G.nodes, raw_labels))

print("Degree centrality weight")
d = G.degree(weight='weight')
print(d)

large = []
small = []
for node in G:
    if d[node] > 4: 
        large.append(node)
    else:
        small.append(node)

print("Small", small)
print("Large", large)

nx.draw_networkx_edges(G, layout)
nx.draw_networkx_nodes(G, layout, nodelist=large, node_size=100)
nx.draw_networkx_nodes(G, layout, nodelist=small, node_size=1500)
nx.draw_networkx_edge_labels(G, layout, edge_labels=labels)
nx.draw_networkx_labels(G, layout, labels=lab_node, font_size=10, font_family='sans-serif')
plt.axis("off")
plt.show()

相关问题 更多 >