如何使用Python和Graphviz标记图的边缘

5

如何在使用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语言在该边上标记“子类”标签,以便概念之间的关系更加清晰。
是否有可用的机制可以实现这一点?

请问您能解释一下“标记边缘”是什么意思吗? - tripleee
另外,请修正代码格式(编辑问题,选择代码块,然后按Ctrl-K;这应该就足够了)。 - tripleee
2个回答

9
您可以将边的标签指定为add_edge的命名参数:
self.graph.add_edge(parent, node, label='subclass')

成功了!那么是否可以将其概括,使标签成为一个动态值,以保持添加概念之间的新关系? - Jayakrishnan B

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()

因此,我认为我们可以每次动态传递标签,并捕获所有关系而不仅仅是子类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接