def test_tree2(): """Tree2.""" root = Node("root") s0 = Node("sub0", parent=root, edge=2) Node("sub0B", parent=s0, foo=4, edge=109) Node("sub0A", parent=s0, edge="") s1 = Node("sub1", parent=root, edge="") Node("sub1A", parent=s1, edge=7) Node("sub1B", parent=s1, edge=8) s1c = Node("sub1C", parent=s1, edge=22) Node("sub1Ca", parent=s1c, edge=42) def nodenamefunc(node): return '%s:%s' % (node.name, node.depth) def edgeattrfunc(node, child): return 'label="%s:%s"' % (node.name, child.name) r = DotExporter(root, options=["rankdir=LR;"], nodenamefunc=nodenamefunc, nodeattrfunc=lambda node: "shape=box", edgeattrfunc=edgeattrfunc) r.to_dotfile(join(GENPATH, "tree2.dot")) assert cmp(join(GENPATH, "tree2.dot"), join(REFPATH, "tree2.dot"))
def render_tree(opts, tree): """Render tree in ASCII and graphviz""" with codecs.open( f"{opts.output_dir}/{constants.FEATURE_IMPORTANCE_HIERARCHY}.txt", "w", encoding="utf8") as txt_file: for pre, _, node in anytree.RenderTree(tree): txt_file.write("%s%s: %s (%s: %s)\n" % (pre, node.name, node.description.title(), opts.effect_name, str(node.effect_size))) graph_options = [ ] # Example: graph_options = ["dpi=300.0;", "style=filled;", "bgcolor=yellow;"] exporter = DotExporter(tree, options=graph_options, nodeattrfunc=lambda node: nodeattrfunc(opts, node)) exporter.to_dotfile( f"{opts.output_dir}/{constants.FEATURE_IMPORTANCE_HIERARCHY}.dot") try: output_filename = f"{opts.output_dir}/{constants.FEATURE_IMPORTANCE_HIERARCHY}.png" exporter.to_picture(output_filename) print(f"Feature importance visualization: {output_filename}") except FileNotFoundError: print( "Feature importance visualization: error during tree rendering. Is Graphviz installed on your system?" )
def export(self, full=False): """ Export tree into graphviz format in both *.dot file and image *.png file Parameters ---------- full: boolean value, if True also the regex mappings are printed in the resulting file """ def nodeattr_fn(node): return f'style=filled color={COLOR_SCHEME[node.depth]}' def nodename_fn(node): nl = "\n" name = node.name if hasattr(node, "regex"): name = f""" {node.name} ----------- {nl.join(node.regex)} """ return name root = self.nodes[self.root_key] dot = DotExporter( root, nodenamefunc=nodename_fn if full else None, nodeattrfunc=nodeattr_fn, options=[ 'graph [layout = dot, ranksep="1.5", nodesep="0.7"]', 'rankdir ="LR"', 'node [fontname="Arial"]' ] ) dot.to_dotfile(f"./{self.root_key}.dot") dot.to_picture(f"./{self.root_key}.png")
def print_node(node): node.update_parent() root = AnyTreeVisitor().visit(node) for pre, fill, node in RenderTree(root): print('%s%s' % (pre, node.name)) # export graphviz files exporter = DotExporter(root) exporter.to_dotfile('graphviz.dot') exporter.to_picture('graphviz.png')