code: def draw_shell(G, nlist=None, **kwargs):
      """Draw networkx graph `G` with shell layout.
  
      This is a convenience function equivalent to::
  
          nx.draw(G, pos=nx.shell_layout(G, nlist=nlist), **kwargs)
  
      Parameters
      ----------
      G : graph
          A networkx graph
  
      nlist : list of list of nodes, optional
          A list containing lists of nodes representing the shells.
          Default is `None`, meaning all nodes are in a single shell.
          See `~networkx.drawing.layout.shell_layout` for details.
  
      kwargs : optional keywords
          See `draw_networkx` for a description of optional keywords.
  
      Notes
      -----
      The layout is computed each time this function is called.
      For repeated drawing it is much more efficient to call
      `~networkx.drawing.layout.shell_layout` directly and reuse the result::
  
          >>> G = nx.complete_graph(5)
          >>> pos = nx.shell_layout(G)
          >>> nx.draw(G, pos=pos)  # Draw the original graph
          >>> # Draw a subgraph, reusing the same node positions
          >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")
  
      Examples
      --------
      >>> G = nx.path_graph(4)
      >>> shells = [[0], [1, 2, 3]]
      >>> nx.draw_shell(G, nlist=shells)
  
      See Also
      --------
      :func:`~networkx.drawing.layout.shell_layout`
      """
      draw(G, shell_layout(G, nlist=nlist), **kwargs)
  
file_path: networkx/networkx/drawing/nx_pylab.py
imports: from numbers import Number
  import networkx
  from networkx.drawing.layout import circular_layout, kamada_kawai_layout, planar_layout, random_layout, shell_layout, spectral_layout, spring_layout
label_desc: Use image node_id 12 for calling a global function with example usage: draw_shell(G, nlist) without return types