pygraphviz_layout(G, prog='neato', root=None, args='')[source]

Create node positions for G using Graphviz.

  • G (NetworkX graph) – A graph created with NetworkX

  • prog (string) – Name of Graphviz layout program

  • root (string, optional) – Root node for twopi layout

  • args (string, optional) – Extra arguments to Graphviz layout program


node_pos – Dictionary of x, y, positions keyed by node.

Return type



>>> G = nx.petersen_graph()
>>> pos = nx.nx_agraph.graphviz_layout(G)
>>> pos = nx.nx_agraph.graphviz_layout(G, prog="dot")


If you use complex node objects, they may have the same string representation and GraphViz could treat them as the same node. The layout may assign both nodes a single location. See Issue #1568 If this occurs in your case, consider relabeling the nodes just for the layout computation using something similar to:

>>> H = nx.convert_node_labels_to_integers(G, label_attribute="node_label")
>>> H_layout = nx.nx_agraph.pygraphviz_layout(G, prog="dot")
>>> G_layout = {H.nodes[n]["node_label"]: p for n, p in H_layout.items()}