Example #1
0
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)
Example #2
0
    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
Example #3
0
            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:
Example #4
0
                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)