docs: def plot_graph_route(G, route, bbox=None, fig_height=6, fig_width=None,
                       margin=0.02, bgcolor='w', axis_off=True, show=True,
                       save=False, close=True, file_format='png', filename='temp',
                       dpi=300, annotate=False, node_color='#999999',
                       node_size=15, node_alpha=1, node_edgecolor='none',
                       node_zorder=1, edge_color='#999999', edge_linewidth=1,
                       edge_alpha=1, use_geom=True, origin_point=None,
                       destination_point=None, route_color='r', route_linewidth=4,
                       route_alpha=0.5, orig_dest_node_alpha=0.5,
                       orig_dest_node_size=100, orig_dest_node_color='r',
                       orig_dest_point_color='b'):
      """
      Plot a route along a networkx spatial graph.
  
      Parameters
      ----------
      G : networkx multidigraph
      route : list
          the route as a list of nodes
      bbox : tuple
          bounding box as north,south,east,west - if None will calculate from
          spatial extents of data. if passing a bbox, you probably also want to
          pass margin=0 to constrain it.
      fig_height : int
          matplotlib figure height in inches
      fig_width : int
          matplotlib figure width in inches
      margin : float
          relative margin around the figure
      axis_off : bool
          if True turn off the matplotlib axis
      bgcolor : string
          the background color of the figure and axis
      show : bool
          if True, show the figure
      save : bool
          if True, save the figure as an image file to disk
      close : bool
          close the figure (only if show equals False) to prevent display
      file_format : string
          the format of the file to save (e.g., 'jpg', 'png', 'svg')
      filename : string
          the name of the file if saving
      dpi : int
          the resolution of the image file if saving
      annotate : bool
          if True, annotate the nodes in the figure
      node_color : string
          the color of the nodes
      node_size : int
          the size of the nodes
      node_alpha : float
          the opacity of the nodes
      node_edgecolor : string
          the color of the node's marker's border
      node_zorder : int
          zorder to plot nodes, edges are always 2, so make node_zorder 1 to plot
          nodes beneath them or 3 to plot nodes atop them
      edge_color : string
          the color of the edges' lines
      edge_linewidth : float
          the width of the edges' lines
      edge_alpha : float
          the opacity of the edges' lines
      use_geom : bool
          if True, use the spatial geometry attribute of the edges to draw
          geographically accurate edges, rather than just lines straight from node
          to node
      origin_point : tuple
          optional, an origin (lat, lon) point to plot instead of the origin node
      destination_point : tuple
          optional, a destination (lat, lon) point to plot instead of the
          destination node
      route_color : string
          the color of the route
      route_linewidth : int
          the width of the route line
      route_alpha : float
          the opacity of the route line
      orig_dest_node_alpha : float
          the opacity of the origin and destination nodes
      orig_dest_node_size : int
          the size of the origin and destination nodes
      orig_dest_node_color : string
          the color of the origin and destination nodes
      orig_dest_point_color : string
          the color of the origin and destination points if being plotted instead
          of nodes
  
      Returns
      -------
      fig, ax : tuple
      """
  
      # plot the graph but not the route
      fig, ax = plot_graph(G, bbox=bbox, fig_height=fig_height, fig_width=fig_width,
                           margin=margin, axis_off=axis_off, bgcolor=bgcolor,
                           show=False, save=False, close=False, filename=filename,
                           dpi=dpi, annotate=annotate, node_color=node_color,
                           node_size=node_size, node_alpha=node_alpha,
                           node_edgecolor=node_edgecolor, node_zorder=node_zorder,
                           edge_color=edge_color, edge_linewidth=edge_linewidth,
                           edge_alpha=edge_alpha, use_geom=use_geom)
  
      # the origin and destination nodes are the first and last nodes in the route
      origin_node = route[0]
      destination_node = route[-1]
  
      if origin_point is None or destination_point is None:
          # if caller didn't pass points, use the first and last node in route as
          # origin/destination
          origin_destination_lats = (G.nodes[origin_node]['y'], G.nodes[destination_node]['y'])
          origin_destination_lons = (G.nodes[origin_node]['x'], G.nodes[destination_node]['x'])
      else:
          # otherwise, use the passed points as origin/destination
          origin_destination_lats = (origin_point[0], destination_point[0])
          origin_destination_lons = (origin_point[1], destination_point[1])
          orig_dest_node_color = orig_dest_point_color
  
      # scatter the origin and destination points
      ax.scatter(origin_destination_lons, origin_destination_lats, s=orig_dest_node_size,
                 c=orig_dest_node_color, alpha=orig_dest_node_alpha, edgecolor=node_edgecolor, zorder=4)
  
      # plot the route lines
      lines = node_list_to_coordinate_lines(G, route, use_geom)
  
      # add the lines to the axis as a linecollection
      lc = LineCollection(lines, colors=route_color, linewidths=route_linewidth, alpha=route_alpha, zorder=3)
      ax.add_collection(lc)
  
      # save and show the figure as specified
      fig, ax = save_and_show(fig, ax, save, show, close, filename, file_format, dpi, axis_off)
      return fig, ax