Как обновить сюжет NetworkX в режиме реального времени? - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь обновить график networkx, используя matplotlib на холсте, но он добавляет новый график к графику каждый раз, вместо обновления приведенного ниже графика, мне пришлось добавить вызов функции 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()

1 Ответ

1 голос
/ 23 января 2020

Я нашел похожий вопрос и ответ после продолжительного поиска по этому вопросу здесь однако для ясности и поскольку я также использовал код из других мест, вы должны использовать G.clear() для очистки текущих узлов и ребер из графика. plt.clf() для удаления рисунка с холста, затем canvas.draw для рисования нового или обновленного графика на холсте.

Использование трех указанных выше функций будет зависеть от вашего индивидуального использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...