2014-05-29 5 views
3

Как пометить ребра графа строится с помощью питона и xdotкак Обозначьте ребра графа с помощью питону и Graphviz

Я придумал, как построить график в 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()) 

Вышеупомянутая программа автоматически создаст график с краем между операционной системой и концепциями управления файлами. Концепции будут отмечены в эллипсах.

Моя проблема заключается, чтобы отметить «подкласс» метки на том краю, используя язык питона так, что отношения ясно между понятиями

Есть ли механизм, доступный для этого?

+0

Не могли бы вы объяснить, что вы подразумеваете под «отметьте края»? – tripleee

+0

Кроме того, pleaae исправляет форматирование кода (отредактируйте вопрос, выберите блок кода и нажмите ctrl-K, что, надеюсь, будет достаточно). – tripleee

ответ

5

Вы можете указать метку края в качестве имени аргумента add_edge:

self.graph.add_edge(parent, node, label='subclass') 
+0

Это сработало !! так можно ли обобщить это так, чтобы метка могла быть динамическим значением, которое сохраняет новые отношения между понятиями? –

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

поэтому этот путь, я думаю, мы можем динамически передать лейблы каждый раз и охватить все отношения, а не только суб-класс .

+0

+1, рад, что ты справился, как это сделать –