python - 如何实时更新 NetworkX 图?

标签 python python-3.x matplotlib networkx

我正在尝试在 Canvas 中使用 matplotlib 更新 networkx 图,但它每次都会向图表添加一个新图表,而不是更新下面的图表,我必须添加对 nx.draw_networkx() 的调用函数来更新它,我不确定这是否是问题的一部分。 示例代码:

import psutil
import tkinter as tk
from tkinter import *
import networkx as nx
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg
)

root = Tk()
root.title("Hello")

mlist = psutil.net_connections(kind="all")
fig = plt.figure(frameon=True, figsize=(5,1), dpi=100)
canvas = FigureCanvasTkAgg(fig, root)
Node = nx.Graph()

for v, val in enumerate(mlist):
    if val[4] != () and val[4][0] != "127.0.0.1":
        print(str(val[4][0]) + " - " + str(val[6]))
        print(psutil.Process(val[6]).name())
        Node.add_node(str(val[4][0]))
        Node.add_edge(str(val[4][0]), "localhost")

plt.gca().set_facecolor("grey")
fig.set_facecolor("black")

nx.draw_networkx(Node, pos=nx.spring_layout(Node, 25), alpha=1,
                 with_labels=False, node_size=100, node_color="green")

canvas.draw()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=True)

def Add():
    Node.add_node(str("LOL"))
    nx.draw_networkx(Node, pos=nx.spring_layout(Node, 25), alpha=1, 
                     with_labels=False, node_size=100,
                         node_color="blue")
    canvas.draw()

ex = tk.Button(root, text="Update", command=lambda: Add())
ex.pack(side="bottom")

root.mainloop()

最佳答案

经过长时间搜索这个问题,我发现了类似的问题和答案here但是为了清楚起见,并且因为我还使用了其他地方的代码,您必须使用 G.clear() 来清除图中的当前节点和边。 plt.clf() 从 Canvas 上清除图形,然后使用 canvas.draw 将新的或更新的图形绘制到 Canvas 上。

以上3个功能的使用取决于您的个人用途。

关于python - 如何实时更新 NetworkX 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59794523/

相关文章:

python-3.x - 从 pandas 数据框中的类别(列)中选择前 n 行并对其执行计算

Python:如何使用 matplotlib.animation?

python - 为什么 plt.imshow(im, cmap ='gray' ) 不显示灰度图像?

python - 如何从 python 中的数组导入模块?

python - 将鼠标悬停在应用程序图标上时如何设置系统托盘标题

python - 将 f-string 与要在 regex 中使用的原始字符串组合会产生 SyntaxError; ValueError 或错误的结果

python - 用零替换 numpy 数组中低于阈值 # 的数字

python - 在 matplotlib 中绘制 "real size"图形(滚动条而不是缩放)

python lxml - 选择不带双斜杠的xpath

python - 在数据框中创建变量作为另一个数据框中其他变量和值的函数的快速方法?