def plot(self, workflow=None, view=True, depth=-1, name=NONE, comment=NONE,
             format=NONE, engine=NONE, encoding=NONE, graph_attr=NONE,
             node_attr=NONE, edge_attr=NONE, body=NONE, node_styles=NONE,
             node_data=NONE, node_function=NONE, edge_data=NONE, max_lines=NONE,
             max_width=NONE, directory=None, sites=None, index=False):
        d = {
            'name': name, 'comment': comment, 'format': format,
            'engine': engine, 'encoding': encoding, 'graph_attr': graph_attr,
            'node_attr': node_attr, 'edge_attr': edge_attr, 'body': body,
        }
        options = {
            'digraph': {k: v for k, v in d.items() if v is not NONE} or NONE,
            'node_styles': node_styles,
            'node_data': node_data,
            'node_function': node_function,
            'edge_data': edge_data,
            'max_lines': max_lines,
            'max_width': max_width,
        }
        options = {k: v for k, v in options.items() if v is not NONE}
        from .drw import SiteMap
        from .sol import Solution
        if workflow is None and isinstance(self, Solution):
            workflow = True
        else:
            workflow = workflow or False
        sitemap = SiteMap()
        sitemap.add_items(self, workflow=workflow, depth=depth, **options)
        if view:
            import tempfile
            directory = directory or tempfile.mkdtemp()
            if sites is None:
                sitemap.render(directory=directory, view=True, index=index)
            else:
                sites.add(sitemap.site(directory, view=True, index=index))
        return sitemap