docs: def plot_shape(gdf, fc='#cbe0f0', ec='#999999', linewidth=1, alpha=1,
                 figsize=(6,6), margin=0.02, axis_off=True):
      """
      Plot a GeoDataFrame of place boundary geometries.
  
      Parameters
      ----------
      gdf : GeoDataFrame
          the gdf containing the geometries to plot
      fc : string or list
          the facecolor (or list of facecolors) for the polygons
      ec : string or list
          the edgecolor (or list of edgecolors) for the polygons
      linewidth : numeric
          the width of the polygon edge lines
      alpha : numeric
          the opacity
      figsize : tuple
          the size of the plotting figure
      margin : numeric
          the size of the figure margins
      axis_off : bool
          if True, disable the matplotlib axes display
  
      Returns
      -------
      fig, ax : tuple
      """
  
      # if facecolor or edgecolor is a string instead of a list, make sure we have
      # as many colors as gdf elements
      if isinstance(fc, str):
          fc = [fc] * len(gdf)
      if isinstance(ec, str):
          ec = [ec] * len(gdf)
  
      # plot the geometries one at a time
      fig, ax = plt.subplots(figsize=figsize)
      for geometry, facecolor, edgecolor in zip(gdf['geometry'], fc, ec):
          if isinstance(geometry, (Polygon, MultiPolygon)):
              if isinstance(geometry, Polygon):
                  geometry = MultiPolygon([geometry])
              for polygon in geometry:
                  patch = PolygonPatch(polygon, fc=facecolor, ec=edgecolor, linewidth=linewidth, alpha=alpha)
                  ax.add_patch(patch)
          else:
              raise ValueError('All geometries in GeoDataFrame must be shapely Polygons or MultiPolygons')
  
      # adjust the axis margins and limits around the image and make axes
      # equal-aspect
      west, south, east, north = gdf.unary_union.bounds
      margin_ns = (north - south) * margin
      margin_ew = (east - west) * margin
      ax.set_ylim((south - margin_ns, north + margin_ns))
      ax.set_xlim((west - margin_ew, east + margin_ew))
      ax.set_aspect(aspect='equal', adjustable='box')
      if axis_off:
          ax.axis('off')
  
      plt.show()
      return fig, ax