def render_graph_with_graphviz(g, filename): """manual hack to render graph because graphtool's graphviz rendering is broken""" edgelist = [] for i in g.edges(): edgelist.append([g.vp.id[i.source()], g.vp.id[i.target()]]) dot = Digraph() dot.engine = 'sfdp' dot.node_attr = {'shape': "point"} dot.edge_attr = {'arrowsize': "0.1", 'penwidth':'0.1'} dot.graph_attr = {'outputorder':'edgesfirst', 'overlap':'false'} size = g.degree_property_map('out') label_size_scaler = graph_tool.draw.prop_to_size(size, mi=2, ma=6, log=False, power=0.5) node_size_scaler = graph_tool.draw.prop_to_size(size, mi=0.005, ma=0.1, log=False, power=1) # https://github.com/xflr6/graphviz/issues/85 for i in flatten_list(edgelist): gt_node = graph_tool.util.find_vertex(g, g.vp.id, i)[0] # gt_node = g_kld2.vertex(vd_kld2[i]) label_size =label_size_scaler[gt_node] node_size = node_size_scaler[gt_node] dot.node(i, xlabel=i, width=str(node_size), fontsize=str(label_size)) dot.edges(edgelist) dot.render(filename = filename)
else: f.attr('node', shape='circle') f.node(aut.q[node].name) node += 1 edges = 0 while edges < len(aut.q): if aut.q[edges].flag == "i": f.attr('node', shape='none') f.edge( '', aut.q[edges].name, ) elif aut.q[edges].flag == "f": f.edge(aut.q[0].name, aut.q[edges].name, label='a, ..., z, A, ..., Z, 0, ..., 9') f.edge(aut.q[edges].name, aut.q[edges].name, label='a, ..., z, A, ..., Z, 0, ..., 9') else: f.edge(aut.q[0].name, aut.q[edges].name, label='0, 1, 2, 3, 4, 5, 6, 7, 8, 9') # f.edge_attr.update(fontsize ='7') f.edge_attr = {'fontsize': '7'} f.edge(aut.q[edges].name, aut.q[edges].name, label='a, ..., z, A, ..., Z, 0, ..., 9') edges += 1
dot.edge(node_name, node_name + 'if_sub', label="N") elif type(item.if_false) in (OnelineCode, LinesCode): node_name_false = node_name + 'if_false' dot.node(node_name_false, item.if_false.__str__()) dot.edge(node_name, node_name_false, label="N") n_res.append((node_name_false, True)) else: pass else: n_res.append((node_name, False)) dot = Digraph(comment=FuncStructObj.name, engine='dot') dot.edge_attr = {'comment': "Wildcard edge", 'fontname': "sans-serif", 'fontsize': '10', 'colorscheme': "blues3", 'color': '2', 'fontcolor': '3'} dot.node_attr = {'fontname': "serif", 'colorscheme': "blues4", 'color': "2", 'style': "filled", 'shape': "rectangle", 'fontsize': '13', 'fillcolor': "1", 'fontcolor': "4"} # Add nodes and edges: items = FuncStructObj.items # 处理每个item,并获取每个item首尾nodes for i in items:
tmp_graph.edge(title,'%s%d' % (title, index)) else: tmp_graph.edge('%s%d' % (title, index - 1),'%s%d' %(title,index)) main_graph.subgraph(tmp_graph) all_node[title] = node_list title_graph.graph_attr.update(rank='same') main_graph.subgraph(title_graph) for index in range(0, length): tmp_graph = Digraph() for title in titles: tmp_graph.node('%s%d' % (title, index)) tmp_graph.graph_attr.update(rank='same') main_graph.subgraph(tmp_graph) return main_graph, all_node titles = ['a','b','c','d'] g, all_node = draw_flow(titles, 20) g.node_attr = {'frontsize':'10','shape':'point','color':'grey','label':''} g.edge_attr = {'arrowhead':'none','style':'filled','color':'grey'} m = Digraph('event','event') m.edge_attr = {'style':'filled','frontsize':'8', 'weight':'0','arrowhead':'normal','color':'blue'} m.edge(all_node['a'][0], all_node['b'][0], label ='req') g.engine = 'dot' g.subgraph(m) g.view()
# # the tree of networks f = o_template % "tree" print(f) graph_attr = {} graph_attr["nodesep"] = "1" graph_attr["ranksep"] = "0.3" # graph_attr.edge_attr["color"] = "blue" graph_attr["splines"] = "false" # ""polyline" edge_attr = {} # edge_attr["tailport"] = "s" # edge_attr["headport"] = "n" simple_graph = Digraph("T", filename=f) simple_graph.graph_attr = graph_attr simple_graph.edge_attr = edge_attr ontology_hierarchy = walkTreeOnly(ontology, "root", simple_graph) print(ontology_hierarchy) simple_graph.view() # generates pdf os.remove(f) # # one node at the time starting with the root node in the network tree behaviour_nodes = [] structure_nodes = [] graph_attr["rankdir"] = "LR" edge_attr["tailport"] = "e" edge_attr["headport"] = "w" # msg_box" graph_attr["nodesep"] = "0.4" graph_attr["ranksep"] = "0.8"
def makeOntologyDotGraph(ontology_tree, ontology_name, show="write"): """ makes the ontology tree for each domain as a pdf and one pdf with all together """ import subprocess ontology = ontology_tree dot_path = os.path.join(DIRECTORIES["ontology_repository"], ontology_name, DIRECTORIES["ontology_graphs_location"], "%s") o_template = dot_path # + ".gv" o = FILES["ontology_file"] % ontology_name # # the tree of networks f = o_template % "tree" print(f) graph_attr = {} graph_attr["nodesep"] = "1" graph_attr["ranksep"] = "0.3" # graph_attr.edge_attr["color"] = "blue" graph_attr["splines"] = "false" # ""polyline" edge_attr = {} # edge_attr["tailport"] = "s" # edge_attr["headport"] = "n" simple_graph = Digraph("T", filename=f) simple_graph.graph_attr = graph_attr simple_graph.edge_attr = edge_attr ontology_hierarchy = walkTreeOnly(ontology, "root", simple_graph) print(ontology_hierarchy) if show == "view": simple_graph.view() # generates pdf else: simple_graph.render() os.remove(f) # # one node at the time starting with the root node in the network tree behaviour_nodes = [] structure_nodes = [] graph_attr["rankdir"] = "LR" edge_attr["tailport"] = "e" edge_attr["headport"] = "w" # msg_box" graph_attr["nodesep"] = "0.4" graph_attr["ranksep"] = "0.8" node = "root" n = str(node) f = o_template % n print(f) node_graph = Digraph(n, filename=f, graph_attr=graph_attr) node_graph.graph_attr = graph_attr node_graph.edge_attr = edge_attr ontology_hierarchy = singleNodeOnly(ontology, n, node_graph, behaviour_nodes, structure_nodes) if show != "summary": node_graph.view() tree = ["root"] makeTree(ontology, "root", tree) for node in tree: if node != "root": n = str(node) f = o_template % n print(f) node_graph = Digraph(n, filename=f, graph_attr=graph_attr) ontology_hierarchy = singleNodeOnly(ontology, n, node_graph, behaviour_nodes, structure_nodes) if show != "summary": node_graph.view() pdf_template = dot_path + ".pdf" merger = PdfFileMerger() pdf = pdf_template % "tree" merger.append(open(pdf, 'rb')) pdf = pdf_template % str("root") merger.append(open(pdf, 'rb')) for node in tree: if node != "root": pdf = pdf_template % str(node) merger.append(open(pdf, 'rb')) o_ = o_template % str(node) if os.path.exists(o_): os.remove(o_) o = dot_path % "all_nodes" + ".pdf" merger.write(o) if show == "summary": shell_file = FILES["latex_shell_ontology_view_exec"] % ontology_name args = ['sh', shell_file, dot_path.replace("%s", "")] # print('ARGS: ', args) make_it = subprocess.Popen( args, # start_new_session=True, # stdout=subprocess.PIPE, # stderr=subprocess.PIPE ) out, error = make_it.communicate() print("file written to :", o)