更新同一图中绘制的网络图并根据节点度数更改节点颜色

时间:2021-04-13 09:46:14

标签: python matplotlib networkx colormap matplotlib-animation

我正在尝试每 5-7 秒更新一次绘图。所以我尝试了 matplotlib 来刷新绘图图。但是通过使用这个,同一个图形一次又一次地绘制。

为了更好地理解 - 我有两个文件,一个用于创建节点,使用另一个程序每 10 秒更改一次,另一个是静态的边创建。从这个文件试图创建一个像这样动态的图表 - https://drive.google.com/file/d/1snFITs4jvW5H8JSF-3pqFE2F1XjX88PD/view?usp=sharing

我的网络代码是 -

fig = plt.figure()
net = fig.add_subplot(111)


def update(it):
    with open('node.csv', 'r') as nodecsv: 
        nodereader = csv.reader(nodecsv)
        nodes = [n for n in nodereader][1:]
        node_names = [n[0] for n in nodes]


    with open('edge.csv', 'r') as edgecsv:
        edgereader = csv.reader(edgecsv) 
        edges = [tuple(e) for e in edgereader][1:] 
  
    g = nx.Graph()
    g.add_nodes_from(node_names)
    g.add_edges_from(edges)
    print(nx.info(g))


# * ******************** Node Color Part **************************** *

    nx.draw(g,pos=pos,node_size=node_size,node_color=color, linewidths=2,**options)

ani = animation.FuncAnimation(fig, update, interval=1000)
plt.show()

另一件事是,我试图根据正在工作的节点属性应用节点颜色,但也根据节点度数表示如果节点属性颜色为蓝色,则分别应用蓝色度数。如果是绿色,则在绿色中单独应用度数,依此类推。 我的节点颜色代码 -

node_status = {}
for node in nodes:
    node_status[node[0]] = node[1]

nx.set_node_attributes(g,node_status,'node_status')
color = []
for n in g.nodes():
    #print(n,g.nodes[n]['node_status'])
    if g.nodes[n]['node_status'] == 'A': color.append("blue")
    if g.nodes[n]['node_status'] == 'B': color.append("yellow")
    if g.nodes[n]['node_status'] == 'C': color.append("red")
    if g.nodes[n]['node_status'] == 'D': color.append("green")
    if g.nodes[n]['node_status'] == 'E': color.append("pink")


betCent = nx.betweenness_centrality(g, normalized=True, endpoints=True)
#node_color = [20000.0 * g.degree(v) for v in g]
node_size =  [v * 10000 for v in betCent.values()]

提前致谢。

0 个答案:

没有答案