用Python绘制动态图表
我很难找到一个 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())