Skip to main content
`Ctrl`+`K`

# MultiDiGraph.subgraph

MultiDiGraph.subgraph(nodes)

  Returns a SubGraph view of the subgraph induced on `nodes`.

  The induced subgraph of the graph contains the nodes in `nodes` and the edges between those nodes.

  Parameters:
    nodes list, iterable

      A container of nodes which will be iterated through once.

  Returns:
    G SubGraph View

      A subgraph view of the graph. The graph structure cannot be changed but node/edge attributes can and are shared with the original graph.

  Notes

  The graph, edge and node attributes are shared with the original graph. Changes to the graph structure is ruled out by the view, but changes to attributes are reflected in the original graph.

  To create a subgraph with its own copy of the edge/node attributes use: G.subgraph(nodes).copy()

  For an inplace reduction of a graph to a subgraph you can remove nodes: G.remove_nodes_from([n for n in G if n not in set(nodes)])

  Subgraph views are sometimes NOT what you want. In most cases where you want to do more than simply look at the induced edges, it makes more sense to just create the subgraph as its own graph with code like:

      # Create a subgraph SG based on a (possibly multigraph) G
      SG = G.__class__()
      SG.add_nodes_from((n, G.nodes[n]) for n in largest_wcc)
      if SG.is_multigraph():
          SG.add_edges_from(
              (n, nbr, key, d)
              for n, nbrs in G.adj.items()
              if n in largest_wcc
              for nbr, keydict in nbrs.items()
              if nbr in largest_wcc
              for key, d in keydict.items()
          )
      else:
          SG.add_edges_from(
              (n, nbr, d)
              for n, nbrs in G.adj.items()
              if n in largest_wcc
              for nbr, d in nbrs.items()
              if nbr in largest_wcc
          )
      SG.graph.update(G.graph)

  Examples

      >>> G = nx.path_graph(4)  # or DiGraph, MultiGraph, MultiDiGraph, etc
      >>> H = G.subgraph([0, 1, 2])
      >>> list(H.edges)
      [(0, 1), (1, 2)]