如何在Python和Graphviz中标记图的边缘
如何在使用Python和xdot构建的图中标记边
我已经找到了一个方法,可以用dot语言在Python中构建图。
import sys
import threading
import time
import networkx as nx
import 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('operating_system', 'file_mgmt')
time.sleep(1.5)
if __name__ == "__main__":
sys.exit(main())
上面的程序会自动创建一个图,其中操作系统和文件管理概念之间有一条边。这些概念会用椭圆形标记出来。
我遇到的问题是,想要在那条边上用Python语言标记一个“子类”标签,以便更清楚地表示这些概念之间的关系。
有没有什么方法可以做到这一点呢?
2 个回答
1
def add_node(self, parent, node,i):
self.graph.add_edge(parent, node, label = i)
self.xdot.set_dotcode(nx.to_agraph(self.graph).to_string())
self.xdot.show_all()
这样的话,我觉得我们可以每次动态地传递标签,并捕捉所有的关系,而不仅仅是某个子类的关系。
9
你可以在调用 add_edge
的时候,把边的标签作为一个命名参数来指定:
self.graph.add_edge(parent, node, label='subclass')