Repository: proplot-dev/proplot
Issue: Error of add_image

Hi,

I want to use Google Maps as a basemap. like:

```python
import cartopy.io.img_tiles as cimgt
request = cimgt.OSM()
axs.add_image(request, 10)
```
But, it report an error.
```python
  File "./plot-sfc-region.py", line 68, in _plot
    f.savefig(_fig_path, bbox_inches='tight')
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/proplot/subplots.py", line 1843, in savefig
    super().savefig(os.path.expanduser(filename), **kwargs)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/matplotlib/figure.py", line 2180, in savefig
    self.canvas.print_figure(fname, **kwargs)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/proplot/subplots.py", line 527, in _preprocess
    self.draw()
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/proplot/subplots.py", line 545, in _preprocess
    return getattr(type(self), method)(self, *args, **kwargs)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py", line 388, in draw
    self.figure.draw(self.renderer)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/proplot/subplots.py", line 1777, in draw
    return super().draw(renderer)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/matplotlib/figure.py", line 1709, in draw
    renderer, self, artists, self.suppressComposite)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/matplotlib/image.py", line 135, in _draw_list_compositing_images
    a.draw(renderer)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/proplot/axes.py", line 1251, in draw
    super().draw(renderer, *args, **kwargs)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/cartopy/mpl/geoaxes.py", line 384, in draw
    transform=factory.crs, *args[1:], **kwargs)
  File "/home/miniconda3/envs/metenv/lib/python3.7/site-packages/proplot/axes.py", line 96, in _wrapper
    raise RuntimeError(msg.format(func.__name__))
RuntimeError: Invalid plotting method 'imshow' for map projection axes
```
Is this proplot bug?

Changed files:
proplot/axes/shared.py, proplot/axes/geo.py, proplot/axes/polar.py

diff --git a/proplot/axes/geo.py b/proplot/axes/geo.py
index fe3a2683..7f23f1c5 100644
--- a/proplot/axes/geo.py
+++ b/proplot/axes/geo.py
@@ -8,7 +8,6 @@ import matplotlib.text as mtext
 import matplotlib.path as mpath
 import matplotlib.ticker as mticker
 from . import base
-from .shared import _disable_decorator
 from .. import crs as pcrs
 from ..utils import arange
 from ..config import rc
@@ -295,37 +294,6 @@ optional
             raise ValueError(f'Invalid {name}label spec: {labels}.')
         return array
 
-    # Disabled methods suitable only for cartesian axes
-    _disable = _disable_decorator(
-        'Invalid plotting method {!r} for map projection axes.'
-    )
-    bar = _disable(base.Axes.bar)
-    barh = _disable(base.Axes.barh)
-    twinx = _disable(base.Axes.twinx)
-    twiny = _disable(base.Axes.twiny)
-    matshow = _disable(base.Axes.matshow)
-    imshow = _disable(base.Axes.imshow)
-    spy = _disable(base.Axes.spy)
-    hist = _disable(base.Axes.hist)
-    hist2d = _disable(base.Axes.hist2d)
-    boxplot = _disable(base.Axes.boxplot)
-    violinplot = _disable(base.Axes.violinplot)
-    step = _disable(base.Axes.step)
-    stem = _disable(base.Axes.stem)
-    stackplot = _disable(base.Axes.stackplot)
-    table = _disable(base.Axes.table)
-    eventplot = _disable(base.Axes.eventplot)
-    pie = _disable(base.Axes.pie)
-    xcorr = _disable(base.Axes.xcorr)
-    acorr = _disable(base.Axes.acorr)
-    psd = _disable(base.Axes.psd)
-    csd = _disable(base.Axes.csd)
-    cohere = _disable(base.Axes.cohere)
-    specgram = _disable(base.Axes.specgram)
-    angle_spectrum = _disable(base.Axes.angle_spectrum)
-    phase_spectrum = _disable(base.Axes.phase_spectrum)
-    magnitude_spectrum = _disable(base.Axes.magnitude_spectrum)
-
 
 def _axes_domain(self, *args, **kwargs):
     """
diff --git a/proplot/axes/polar.py b/proplot/axes/polar.py
index ff92f645..7f31d2f9 100644
--- a/proplot/axes/polar.py
+++ b/proplot/axes/polar.py
@@ -6,7 +6,6 @@ import matplotlib.projections as mproj
 import numpy as np
 import matplotlib.ticker as mticker
 from . import base
-from .shared import _disable_decorator
 from .. import ticker as pticker
 from .. import constructor
 from ..config import rc
@@ -254,32 +253,3 @@ optional
 
             # Parent method
             super().format(*args, **kwargs)
-
-    # Disabled methods suitable only for cartesian axes
-    _disable = _disable_decorator(
-        'Invalid plotting method {!r} for polar axes.'
-    )
-    twinx = _disable(base.Axes.twinx)
-    twiny = _disable(base.Axes.twiny)
-    matshow = _disable(base.Axes.matshow)
-    imshow = _disable(base.Axes.imshow)
-    spy = _disable(base.Axes.spy)
-    hist = _disable(base.Axes.hist)
-    hist2d = _disable(base.Axes.hist2d)
-    boxplot = _disable(base.Axes.boxplot)
-    violinplot = _disable(base.Axes.violinplot)
-    step = _disable(base.Axes.step)
-    stem = _disable(base.Axes.stem)
-    stackplot = _disable(base.Axes.stackplot)
-    table = _disable(base.Axes.table)
-    eventplot = _disable(base.Axes.eventplot)
-    pie = _disable(base.Axes.pie)
-    xcorr = _disable(base.Axes.xcorr)
-    acorr = _disable(base.Axes.acorr)
-    psd = _disable(base.Axes.psd)
-    csd = _disable(base.Axes.csd)
-    cohere = _disable(base.Axes.cohere)
-    specgram = _disable(base.Axes.specgram)
-    angle_spectrum = _disable(base.Axes.angle_spectrum)
-    phase_spectrum = _disable(base.Axes.phase_spectrum)
-    magnitude_spectrum = _disable(base.Axes.magnitude_spectrum)
diff --git a/proplot/axes/shared.py b/proplot/axes/shared.py
deleted file mode 100644
index 61665fe3..00000000
--- a/proplot/axes/shared.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""
-Shared utilities for axes classes.
-"""
-import functools
-
-
-def _disable_decorator(msg):
-    """
-    Return a decorator that disables methods with message `msg`. The
-    docstring is set to ``None`` so the ProPlot fork of automodapi doesn't add
-    these methods to the website documentation. Users can still call
-    help(ax.method) because python looks for superclass method docstrings if a
-    docstring is empty.
-    """
-    def decorator(func):
-        @functools.wraps(func)
-        def _wrapper(self, *args, **kwargs):
-            raise RuntimeError(msg.format(func.__name__))
-        _wrapper.__doc__ = None
-        return _wrapper
-    return decorator