[英]How to draw a graph with different sized nodes Networkx
我用節點之間鏈接的權重計算了節點的度中心性。 下一個任務是繪制具有不同大小節點的圖形。 比如度中心度>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()
以下代碼有效。 在您的代碼中存在一些問題:首先,就像 Joel 在評論中提出的那樣,您使用small
和large
作為變量,但希望它們成為列表。 其次,你必須使用edgelist
代替的nodelist
中draw_networkx_nodes
。 我更換了nx.draw
與nx.draw_networkx_edges
(並添加plt.axis("off")
以允許其他用戶繪制更小或更大尺寸的節點比默認的大小,因為較小的尺寸不會與工作nx.draw
。
作為最后的個人建議,我會將變量名稱(例如d
、 G
或small
)替換為更長的自解釋名稱,例如node_degrees
、 graph
、 node_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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.