用Python绘制动态图表

2 投票
2 回答
1685 浏览
提问于 2025-04-17 19:12

我很难找到一个 python 的代码示例,它可以画出一个 图形结构(比如树形结构或状态机),并且可以让你 输入/流入数据,这样它就能显示最新的数据。

2 个回答

1

如果你打算更新一个文件,然后从另一个进程定期读取它,你可以考虑写一个简单的网页服务器,用浏览器作为用户界面。这样的话,你可以用JSON格式来传输数据,客户端可以定期请求数据。

你有没有想过使用IPython?他们的HTML笔记本对使用matplotlib的支持非常好。虽然你可能还需要写一些JavaScript来实现你想要的功能,但他们在这方面已经做了很多工作,这些内容可以在开发者的GitHub账号上找到,不过还没有合并到主版本中。

他们还有一个Qt控制台,可能更适合你想要实现的功能。

2

如果我理解得没错,这段代码应该能解决你的问题:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys
import threading
import time

import networkx as nx # http://networkx.github.com/
import xdot # http://code.google.com/p/jrfonseca/wiki/XDot
import gtk

class MyClass(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self) 
        self.graph = nx.DiGraph(name="my_tree")
        self.xdot = xdot.DotWindow()
        self.xdot.connect('destroy', gtk.main_quit)

    def run(self):
        gtk.main()

    def add_node(self, parent, node):

        self.graph.add_edge(parent, node)
        self.xdot.set_dotcode(nx.to_agraph(self.graph).to_string())
        self.xdot.show_all()

def main(argv=None):

    gtk.gdk.threads_init()
    my_class = MyClass()
    my_class.start()

    my_class.add_node(1, 2)
    time.sleep(0.5)
    my_class.add_node(1, 3)
    time.sleep(0.3)
    my_class.add_node(2, 4)
    time.sleep(1.3)
    my_class.add_node(2, 5)
    my_class.add_node(1, 6)

if __name__ == "__main__":
    sys.exit(main())

撰写回答