如何在Python和Graphviz中标记图的边缘

5 投票
2 回答
9427 浏览
提问于 2025-04-18 07:54

如何在使用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')

撰写回答