Repository: holoviz/hvplot

Issue:
xlim/ylim errors when geo=True
#### ALL software version info

<details> <summary> conda environment </summary>

```
# Name                    Version                   Build  Channel
abseil-cpp                20211102.0           h6b3803e_1    conda-forge
affine                    2.3.1              pyhd8ed1ab_0    conda-forge
aiobotocore               2.4.0              pyhd8ed1ab_0    conda-forge
aiohttp                   3.8.3           py310h8e9501a_0    conda-forge
aioitertools              0.11.0             pyhd8ed1ab_0    conda-forge
aiosignal                 1.2.0              pyhd8ed1ab_0    conda-forge
anyio                     3.6.2              pyhd8ed1ab_0    conda-forge
appdirs                   1.4.4              pyh9f0ad1d_0    conda-forge
appnope                   0.1.3              pyhd8ed1ab_0    conda-forge
argon2-cffi               21.3.0             pyhd8ed1ab_0    conda-forge
argon2-cffi-bindings      21.2.0          py310hf8d0d8f_2    conda-forge
arrow-cpp                 8.0.0           py310h6b3e42c_0  
asciitree                 0.3.3                      py_2    conda-forge
asttokens                 2.0.8              pyhd8ed1ab_0    conda-forge
async-timeout             4.0.2              pyhd8ed1ab_0    conda-forge
attrs                     22.1.0             pyh71513ae_1    conda-forge
aws-c-common              0.6.8                h1a28f6b_0  
aws-c-event-stream        0.1.6                hc377ac9_5  
aws-checksums             0.1.11               h1a28f6b_1  
aws-sdk-cpp               1.8.185              h4a942e0_0  
babel                     2.10.3             pyhd8ed1ab_0    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
backports                 1.0                        py_2    conda-forge
backports.functools_lru_cache 1.6.4              pyhd8ed1ab_0    conda-forge
beautifulsoup4            4.11.1             pyha770c72_0    conda-forge
bleach                    5.0.1              pyhd8ed1ab_0    conda-forge
blosc                     1.21.1               hd414afc_3    conda-forge
bokeh                     2.4.3              pyhd8ed1ab_3    conda-forge
boost-cpp                 1.78.0               h1cb353e_1    conda-forge
botocore                  1.27.59            pyhd8ed1ab_0    conda-forge
branca                    0.5.0              pyhd8ed1ab_0    conda-forge
brotli                    1.0.9                h1c322ee_7    conda-forge
brotli-bin                1.0.9                h1c322ee_7    conda-forge
brotlipy                  0.7.0           py310hf8d0d8f_1004    conda-forge
bzip2                     1.0.8                h3422bc3_4    conda-forge
c-ares                    1.18.1               h3422bc3_0    conda-forge
ca-certificates           2022.9.24            h4653dfc_0    conda-forge
cairo                     1.16.0            h73a0509_1014    conda-forge
cartopy                   0.21.0          py310h9c658c6_0    conda-forge
certifi                   2022.9.24          pyhd8ed1ab_0    conda-forge
cffi                      1.15.1          py310h2399d43_1    conda-forge
cfitsio                   4.1.0                hd4f5c17_0    conda-forge
cftime                    1.6.2           py310hf1a086a_0    conda-forge
charset-normalizer        2.1.1              pyhd8ed1ab_0    conda-forge
click                     8.1.3           py310hbe9552e_0    conda-forge
click-plugins             1.1.1                      py_0    conda-forge
cligj                     0.7.2              pyhd8ed1ab_1    conda-forge
cloudpickle               2.2.0              pyhd8ed1ab_0    conda-forge
colorama                  0.4.5              pyhd8ed1ab_0    conda-forge
colorcet                  3.0.1                      py_0    pyviz
contourpy                 1.0.5           py310h2887b22_0    conda-forge
cramjam                   2.5.0           py310he41690c_0    conda-forge
cryptography              38.0.2          py310h4fe9c50_0    conda-forge
curl                      7.85.0               hd538317_0    conda-forge
cycler                    0.11.0             pyhd8ed1ab_0    conda-forge
cytoolz                   0.12.0          py310h02f21da_0    conda-forge
dask                      2022.10.0          pyhd8ed1ab_2    conda-forge
dask-core                 2022.10.0          pyhd8ed1ab_1    conda-forge
datashader                0.14.2                     py_0    pyviz
datashape                 0.5.4                      py_1    conda-forge
debugpy                   1.6.3           py310hc6dc59f_0    conda-forge
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
distributed               2022.10.0          pyhd8ed1ab_2    conda-forge
entrypoints               0.4                pyhd8ed1ab_0    conda-forge
executing                 1.1.1              pyhd8ed1ab_0    conda-forge
expat                     2.4.9                hb7217d7_0    conda-forge
fasteners                 0.17.3             pyhd8ed1ab_0    conda-forge
fastparquet               0.8.3           py310hf1a086a_0    conda-forge
fiona                     1.8.22          py310hcdcf461_0    conda-forge
flit-core                 3.7.1              pyhd8ed1ab_0    conda-forge
folium                    0.13.0             pyhd8ed1ab_0    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 hab24e00_0    conda-forge
fontconfig                2.14.0               h82840c6_1    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.37.4          py310h8e9501a_0    conda-forge
freetype                  2.12.1               hd633e50_0    conda-forge
freexl                    1.0.6                h1a8c8d9_1    conda-forge
frozenlist                1.3.1           py310h8c01e39_0    conda-forge
fsspec                    2022.10.0          pyhd8ed1ab_0    conda-forge
gdal                      3.5.2           py310hc67b115_4    conda-forge
geopandas                 0.11.1             pyhd8ed1ab_0    conda-forge
geopandas-base            0.11.1             pyha770c72_0    conda-forge
geos                      3.11.0               h9a09cb3_0    conda-forge
geotiff                   1.7.1                hc898e3f_3    conda-forge
geoviews                  1.9.5                      py_0    pyviz
geoviews-core             1.9.5                      py_0    pyviz
gettext                   0.21.1               h0186832_0    conda-forge
gflags                    2.2.2             hc88da5d_1004    conda-forge
giflib                    5.2.1                h27ca646_2    conda-forge
glog                      0.6.0                h6da1cb0_0    conda-forge
grpc-cpp                  1.46.1               h64f8b41_0  
hdf4                      4.2.15               hc683e77_4    conda-forge
hdf5                      1.12.2          nompi_h8968d4b_100    conda-forge
heapdict                  1.0.1                      py_0    conda-forge
holoviews                 1.15.1                     py_0    pyviz
hvplot                    0.8.1                      py_0    pyviz
icu                       70.1                 h6b3803e_0    conda-forge
idna                      3.4                pyhd8ed1ab_0    conda-forge
importlib-metadata        4.11.4          py310hbe9552e_0    conda-forge
importlib_resources       5.10.0             pyhd8ed1ab_0    conda-forge
intake                    0.6.6              pyhd8ed1ab_0    conda-forge
intake-parquet            0.2.3                      py_0    conda-forge
intake-xarray             0.6.1              pyhd8ed1ab_0    conda-forge
ipykernel                 6.16.1             pyh736e0ef_0    conda-forge
ipython                   8.5.0              pyhd1c38e8_1    conda-forge
ipython_genutils          0.2.0                      py_1    conda-forge
ipywidgets                8.0.2              pyhd8ed1ab_1    conda-forge
jedi                      0.18.1             pyhd8ed1ab_2    conda-forge
jinja2                    3.1.2              pyhd8ed1ab_1    conda-forge
jmespath                  1.0.1              pyhd8ed1ab_0    conda-forge
joblib                    1.2.0              pyhd8ed1ab_0    conda-forge
jpeg                      9e                   he4db4b2_2    conda-forge
json-c                    0.16                 hc449e50_0    conda-forge
json5                     0.9.5              pyh9f0ad1d_0    conda-forge
jsonschema                4.16.0             pyhd8ed1ab_0    conda-forge
jupyter                   1.0.0           py310hbe9552e_7    conda-forge
jupyter_client            7.3.4              pyhd8ed1ab_0    conda-forge
jupyter_console           6.4.4              pyhd8ed1ab_0    conda-forge
jupyter_core              4.11.1          py310hbe9552e_0    conda-forge
jupyter_server            1.21.0             pyhd8ed1ab_0    conda-forge
jupyterlab                3.4.8              pyhd8ed1ab_0    conda-forge
jupyterlab_pygments       0.2.2              pyhd8ed1ab_0    conda-forge
jupyterlab_server         2.16.1             pyhd8ed1ab_0    conda-forge
jupyterlab_widgets        3.0.3              pyhd8ed1ab_0    conda-forge
kealib                    1.4.15               h02ce806_1    conda-forge
kiwisolver                1.4.4           py310hd23d0e8_0    conda-forge
krb5                      1.19.3               hf9b2bbe_0    conda-forge
lcms2                     2.12                 had6a04f_0    conda-forge
lerc                      4.0.0                h9a09cb3_0    conda-forge
libblas                   3.9.0           16_osxarm64_openblas    conda-forge
libbrotlicommon           1.0.9                h1c322ee_7    conda-forge
libbrotlidec              1.0.9                h1c322ee_7    conda-forge
libbrotlienc              1.0.9                h1c322ee_7    conda-forge
libcblas                  3.9.0           16_osxarm64_openblas    conda-forge
libcurl                   7.85.0               hd538317_0    conda-forge
libcxx                    14.0.6               h2692d47_0    conda-forge
libdap4                   3.20.6               h8510809_2    conda-forge
libdeflate                1.14                 h1a8c8d9_0    conda-forge
libedit                   3.1.20191231         hc8eb9b7_2    conda-forge
libev                     4.33                 h642e427_1    conda-forge
libevent                  2.1.10               hbae9a57_4    conda-forge
libffi                    3.4.2                h3422bc3_5    conda-forge
libgdal                   3.5.2                hdf189a9_4    conda-forge
libgfortran               5.0.0           11_3_0_hd922786_25    conda-forge
libgfortran5              11.3.0              hdaf2cc0_25    conda-forge
libglib                   2.74.0               h14ed1c1_0    conda-forge
libiconv                  1.17                 he4db4b2_0    conda-forge
libkml                    1.3.0             h41464e4_1015    conda-forge
liblapack                 3.9.0           16_osxarm64_openblas    conda-forge
libllvm11                 11.1.0               hfa12f05_4    conda-forge
libnetcdf                 4.8.1           nompi_h996a5af_104    conda-forge
libnghttp2                1.47.0               h232270b_1    conda-forge
libopenblas               0.3.21          openmp_hc731615_3    conda-forge
libpng                    1.6.38               h76d750c_0    conda-forge
libpq                     14.5                 hb2ab832_0    conda-forge
libprotobuf               3.20.1               hb5ab8b9_4    conda-forge
librttopo                 1.1.0               h275bb25_11    conda-forge
libsodium                 1.0.18               h27ca646_1    conda-forge
libspatialindex           1.9.3                hbdafb3b_4    conda-forge
libspatialite             5.0.1               h47b1232_18    conda-forge
libsqlite                 3.39.4               h76d750c_0    conda-forge
libssh2                   1.10.0               hb80f160_3    conda-forge
libthrift                 0.13.0               hd358383_6  
libtiff                   4.4.0                hfa0b094_4    conda-forge
libwebp-base              1.2.4                h57fd34a_0    conda-forge
libxcb                    1.13              h9b22ae9_1004    conda-forge
libxml2                   2.9.14               h9d8dfc2_4    conda-forge
libzip                    1.9.2                h96606af_1    conda-forge
libzlib                   1.2.13               h03a7124_4    conda-forge
llvm-openmp               14.0.4               hd125106_0    conda-forge
llvmlite                  0.39.1          py310h1e34944_0    conda-forge
locket                    1.0.0              pyhd8ed1ab_0    conda-forge
lz4                       4.0.0           py310h810453e_2    conda-forge
lz4-c                     1.9.3                hbdafb3b_1    conda-forge
mapclassify               2.4.3              pyhd8ed1ab_0    conda-forge
markdown                  3.4.1              pyhd8ed1ab_0    conda-forge
markupsafe                2.1.1           py310hf8d0d8f_1    conda-forge
matplotlib                3.6.1           py310hb6292c7_0    conda-forge
matplotlib-base           3.6.1           py310h78c5c2f_0    conda-forge
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
mistune                   2.0.4              pyhd8ed1ab_0    conda-forge
msgpack-python            1.0.4           py310hd23d0e8_0    conda-forge
multidict                 6.0.2           py310hf8d0d8f_1    conda-forge
multipledispatch          0.6.0                      py_0    conda-forge
munch                     2.5.0                      py_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
nbclassic                 0.4.5              pyhd8ed1ab_0    conda-forge
nbclient                  0.7.0              pyhd8ed1ab_0    conda-forge
nbconvert                 7.2.2              pyhd8ed1ab_0    conda-forge
nbconvert-core            7.2.2              pyhd8ed1ab_0    conda-forge
nbconvert-pandoc          7.2.2              pyhd8ed1ab_0    conda-forge
nbformat                  5.7.0              pyhd8ed1ab_0    conda-forge
ncurses                   6.3                  h07bb92c_1    conda-forge
nest-asyncio              1.5.6              pyhd8ed1ab_0    conda-forge
netcdf4                   1.6.1           nompi_py310haaa361f_100    conda-forge
networkx                  2.8.7              pyhd8ed1ab_0    conda-forge
notebook                  6.5.1              pyha770c72_0    conda-forge
notebook-shim             0.2.0              pyhd8ed1ab_0    conda-forge
nspr                      4.32                 hbdafb3b_1    conda-forge
nss                       3.78                 h1483a63_0    conda-forge
numba                     0.56.3          py310h3124f1e_0    conda-forge
numcodecs                 0.10.2          py310hc6dc59f_0    conda-forge
numpy                     1.23.4          py310h5d7c261_0    conda-forge
openjpeg                  2.5.0                h5d4e404_1    conda-forge
openssl                   1.1.1q               h03a7124_1    conda-forge
orc                       1.7.4                hb613a79_0  
packaging                 21.3               pyhd8ed1ab_0    conda-forge
pandas                    1.5.1           py310h2b830bf_0    conda-forge
pandoc                    2.12                 hca03da5_0  
pandocfilters             1.5.0              pyhd8ed1ab_0    conda-forge
panel                     0.14.0                     py_0    pyviz
param                     1.12.2                     py_0    pyviz
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
partd                     1.3.0              pyhd8ed1ab_0    conda-forge
pcre                      8.45                 hbdafb3b_0    conda-forge
pcre2                     10.37                hcf5f1cc_1    conda-forge
pexpect                   4.8.0              pyh9f0ad1d_2    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    9.2.0           py310h173adc3_2    conda-forge
pip                       22.3               pyhd8ed1ab_0    conda-forge
pixman                    0.40.0               h27ca646_0    conda-forge
pkgutil-resolve-name      1.3.10             pyhd8ed1ab_0    conda-forge
plotly                    5.10.0             pyhd8ed1ab_0    conda-forge
pooch                     1.6.0              pyhd8ed1ab_0    conda-forge
poppler                   22.10.0              hae7f5f0_0    conda-forge
poppler-data              0.4.11               hd8ed1ab_0    conda-forge
postgresql                14.5                 hb0ca4ee_0    conda-forge
proj                      9.0.1                h4c79c2b_1    conda-forge
prometheus_client         0.15.0             pyhd8ed1ab_0    conda-forge
prompt-toolkit            3.0.31             pyha770c72_0    conda-forge
prompt_toolkit            3.0.31               hd8ed1ab_0    conda-forge
psutil                    5.9.3           py310h8e9501a_0    conda-forge
pthread-stubs             0.4               h27ca646_1001    conda-forge
ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
pyarrow                   8.0.0           py310hf303d72_0  
pycparser                 2.21               pyhd8ed1ab_0    conda-forge
pyct                      0.4.8                      py_0    pyviz
pyct-core                 0.4.8                      py_0    pyviz
pygments                  2.13.0             pyhd8ed1ab_0    conda-forge
pyopenssl                 22.1.0             pyhd8ed1ab_0    conda-forge
pyparsing                 3.0.9              pyhd8ed1ab_0    conda-forge
pyproj                    3.4.0           py310h7275060_0    conda-forge
pyrsistent                0.18.1          py310hf8d0d8f_1    conda-forge
pyshp                     2.3.1              pyhd8ed1ab_0    conda-forge
pysocks                   1.7.1              pyha2e5f31_6    conda-forge
python                    3.10.6          hbce4517_0_cpython    conda-forge
python-dateutil           2.8.2              pyhd8ed1ab_0    conda-forge
python-fastjsonschema     2.16.2             pyhd8ed1ab_0    conda-forge
python-snappy             0.6.0           py310h8bfdf0b_2    conda-forge
python_abi                3.10                    2_cp310    conda-forge
pytz                      2022.5             pyhd8ed1ab_0    conda-forge
pyviz_comms               2.2.1                      py_0    pyviz
pyyaml                    6.0             py310hf8d0d8f_4    conda-forge
pyzmq                     24.0.1          py310hc407298_0    conda-forge
rasterio                  1.3.3           py310ha36aacf_0    conda-forge
re2                       2022.04.01           h6b3803e_0    conda-forge
readline                  8.1.2                h46ed386_0    conda-forge
requests                  2.28.1             pyhd8ed1ab_1    conda-forge
retrying                  1.3.3                      py_2    conda-forge
rtree                     1.0.1           py310ha3239f5_0    conda-forge
s3fs                      2022.10.0          pyhd8ed1ab_0    conda-forge
scikit-learn              1.1.2           py310h3d7afdd_0    conda-forge
scipy                     1.9.3           py310ha0d8a01_0    conda-forge
send2trash                1.8.0              pyhd8ed1ab_0    conda-forge
setuptools                65.5.0             pyhd8ed1ab_0    conda-forge
shapely                   1.8.5           py310hc253cc3_0    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
snappy                    1.1.9                h39c3846_1    conda-forge
sniffio                   1.3.0              pyhd8ed1ab_0    conda-forge
snuggs                    1.4.7                      py_0    conda-forge
sortedcontainers          2.4.0              pyhd8ed1ab_0    conda-forge
soupsieve                 2.3.2.post1        pyhd8ed1ab_0    conda-forge
spatialpandas             0.4.4                      py_0    pyviz
sqlite                    3.39.4               h2229b38_0    conda-forge
stack_data                0.5.1              pyhd8ed1ab_0    conda-forge
streamz                   0.6.4              pyh6c4a22f_0    conda-forge
tblib                     1.7.0              pyhd8ed1ab_0    conda-forge
tenacity                  8.1.0              pyhd8ed1ab_0    conda-forge
terminado                 0.16.0             pyhd1c38e8_0    conda-forge
threadpoolctl             3.1.0              pyh8a188c0_0    conda-forge
tiledb                    2.12.0               hc7ac4c9_0    conda-forge
tinycss2                  1.2.1              pyhd8ed1ab_0    conda-forge
tk                        8.6.12               he1e0b03_0    conda-forge
tomli                     2.0.1              pyhd8ed1ab_0    conda-forge
toolz                     0.12.0             pyhd8ed1ab_0    conda-forge
tornado                   6.1             py310hf8d0d8f_3    conda-forge
tqdm                      4.64.1             pyhd8ed1ab_0    conda-forge
traitlets                 5.5.0              pyhd8ed1ab_0    conda-forge
typing-extensions         4.4.0                hd8ed1ab_0    conda-forge
typing_extensions         4.4.0              pyha770c72_0    conda-forge
tzcode                    2022e                h1a8c8d9_0    conda-forge
tzdata                    2022e                h191b570_0    conda-forge
unicodedata2              14.0.0          py310hf8d0d8f_1    conda-forge
urllib3                   1.26.11            pyhd8ed1ab_0    conda-forge
utf8proc                  2.6.1                h1a28f6b_0  
wcwidth                   0.2.5              pyh9f0ad1d_2    conda-forge
webencodings              0.5.1                      py_1    conda-forge
websocket-client          1.4.1              pyhd8ed1ab_0    conda-forge
wheel                     0.37.1             pyhd8ed1ab_0    conda-forge
widgetsnbextension        4.0.3              pyhd8ed1ab_0    conda-forge
wrapt                     1.14.1          py310h02f21da_0    conda-forge
xarray                    2022.10.0          pyhd8ed1ab_0    conda-forge
xerces-c                  3.2.4                h627aa08_1    conda-forge
xorg-libxau               1.0.9                h27ca646_0    conda-forge
xorg-libxdmcp             1.1.3                h27ca646_0    conda-forge
xyzservices               2022.9.0           pyhd8ed1ab_0    conda-forge
xz                        5.2.6                h57fd34a_0    conda-forge
yaml                      0.2.5                h3422bc3_2    conda-forge
yarl                      1.7.2           py310hf8d0d8f_2    conda-forge
zarr                      2.13.3             pyhd8ed1ab_0    conda-forge
zeromq                    4.3.4                hbdafb3b_1    conda-forge
zict                      2.2.0              pyhd8ed1ab_0    conda-forge
zipp                      3.9.0              pyhd8ed1ab_0    conda-forge
zlib                      1.2.13               h03a7124_4    conda-forge
zstd                      1.5.2                h8128057_4    conda-forge
```

</details>

OS: macOS 12.5.1 (running on an M1 Mac, native conda), Safari 15.6.1 


#### Description of expected behavior and the observed behavior

Setting xlim/ylim when using geo=True leads to unexpected behavior and fails in some cases. xlim/ylim are not obeyed when background map tiles are removed from the plot. Setting xlim and ylim raises errors for some cases (seems to error when ymin > 0 or ymax < 0).

#### Complete, minimal, self-contained example code that reproduces the issue

```python
import hvplot.pandas  # noqa
import cartopy.crs as ccrs

from bokeh.sampledata.airport_routes import airports

# Case 1: This example works
airports.hvplot.points('Longitude', 'Latitude', geo=True, color='red', alpha=0.2,
                       xlim=(-180, -30), ylim=(0, 72), tiles='ESRI')

# Case 2: xlim/ylim are not obeyed when the map tile is removed 
airports.hvplot.points('Longitude', 'Latitude', geo=True, color='red', alpha=0.2,
                       xlim=(-180, -30), ylim=(0, 72))

# Case 3: Setting ymin > 0 raises errors
# Change ymin from 0 to 10
airports.hvplot.points('Longitude', 'Latitude', geo=True, color='red', alpha=0.2,
                       xlim=(-180, -30), ylim=(10, 72))

# Case 4: Setting ymax < 0 also raises errors
airports.hvplot.points('Longitude', 'Latitude', geo=True, color='red', alpha=0.2,
                       xlim=(-180, -30), ylim=(-20, -5))

# Works if geo=False
airports.hvplot.points('Longitude', 'Latitude', geo=False, color='red', alpha=0.2,
                       xlim=(-180, -30), ylim=(10, 72))

```

#### Stack traceback and/or browser JavaScript console output

<details><summary> Traceback for case 3 </summary>

```
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/IPython/core/formatters.py:973, in MimeBundleFormatter.__call__(self, obj, include, exclude)
    970     method = get_real_method(obj, self.print_method)
    972     if method is not None:
--> 973         return method(include=include, exclude=exclude)
    974     return None
    975 else:

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/core/dimension.py:1294, in Dimensioned._repr_mimebundle_(self, include, exclude)
   1287 def _repr_mimebundle_(self, include=None, exclude=None):
   1288     """
   1289     Resolves the class hierarchy for the class rendering the
   1290     object using any display hooks registered on Store.display
   1291     hooks.  The output of all registered display_hooks is then
   1292     combined and returned.
   1293     """
-> 1294     return Store.render(self)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/core/options.py:1426, in Store.render(cls, obj)
   1424 data, metadata = {}, {}
   1425 for hook in hooks:
-> 1426     ret = hook(obj)
   1427     if ret is None:
   1428         continue

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:277, in pprint_display(obj)
    275 if not ip.display_formatter.formatters['text/plain'].pprint:
    276     return None
--> 277 return display(obj, raw_output=True)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:247, in display(obj, raw_output, **kwargs)
    245 elif isinstance(obj, (CompositeOverlay, ViewableElement)):
    246     with option_state(obj):
--> 247         output = element_display(obj)
    248 elif isinstance(obj, (Layout, NdLayout, AdjointLayout)):
    249     with option_state(obj):

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:141, in display_hook.<locals>.wrapped(element)
    139 try:
    140     max_frames = OutputSettings.options['max_frames']
--> 141     mimebundle = fn(element, max_frames=max_frames)
    142     if mimebundle is None:
    143         return {}, {}

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:187, in element_display(element, max_frames)
    184 if type(element) not in Store.registry[backend]:
    185     return None
--> 187 return render(element)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:68, in render(obj, **kwargs)
     65 if renderer.fig == 'pdf':
     66     renderer = renderer.instance(fig='png')
---> 68 return renderer.components(obj, **kwargs)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/renderer.py:398, in Renderer.components(self, obj, fmt, comm, **kwargs)
    395 embed = (not (dynamic or streams or self.widget_mode == 'live') or config.embed)
    397 if embed or config.comms == 'default':
--> 398     return self._render_panel(plot, embed, comm)
    399 return self._render_ipywidget(plot)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/renderer.py:405, in Renderer._render_panel(self, plot, embed, comm)
    403 doc = Document()
    404 with config.set(embed=embed):
--> 405     model = plot.layout._render_model(doc, comm)
    406 if embed:
    407     return render_model(model, comm)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/viewable.py:505, in Renderable._render_model(self, doc, comm)
    503 if comm is None:
    504     comm = state._comm_manager.get_server_comm()
--> 505 model = self.get_root(doc, comm)
    507 if config.embed:
    508     embed_state(self, model, doc,
    509                 json=config.embed_json,
    510                 json_prefix=config.embed_json_prefix,
    511                 save_path=config.embed_save_path,
    512                 load_path=config.embed_load_path,
    513                 progress=False)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/viewable.py:556, in Renderable.get_root(self, doc, comm, preprocess)
    539 """
    540 Returns the root model and applies pre-processing hooks
    541 
   (...)
    553 Returns the bokeh model corresponding to this panel object
    554 """
    555 doc = init_doc(doc)
--> 556 root = self._get_model(doc, comm=comm)
    557 if preprocess:
    558     self._preprocess(root)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/layout/base.py:146, in Panel._get_model(self, doc, root, parent, comm)
    144 if root is None:
    145     root = model
--> 146 objects = self._get_objects(model, [], doc, root, comm)
    147 props = dict(self._init_params(), objects=objects)
    148 model.update(**self._process_param_change(props))

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/layout/base.py:131, in Panel._get_objects(self, model, old_objects, doc, root, comm)
    129 else:
    130     try:
--> 131         child = pane._get_model(doc, root, model, comm)
    132     except RerenderError:
    133         return self._get_objects(model, current_objects[:i], doc, root, comm)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/pane/holoviews.py:265, in HoloViews._get_model(self, doc, root, parent, comm)
    263     plot = self.object
    264 else:
--> 265     plot = self._render(doc, comm, root)
    267 plot.pane = self
    268 backend = plot.renderer.backend

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/pane/holoviews.py:342, in HoloViews._render(self, doc, comm, root)
    339     if comm:
    340         kwargs['comm'] = comm
--> 342 return renderer.get_plot(self.object, **kwargs)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/renderer.py:70, in BokehRenderer.get_plot(self_or_cls, obj, doc, renderer, **kwargs)
     63 @bothmethod
     64 def get_plot(self_or_cls, obj, doc=None, renderer=None, **kwargs):
     65     """
     66     Given a HoloViews Viewable return a corresponding plot instance.
     67     Allows supplying a document attach the plot to, useful when
     68     combining the bokeh model with another plot.
     69     """
---> 70     plot = super().get_plot(obj, doc, renderer, **kwargs)
     71     if plot.document is None:
     72         plot.document = Document() if self_or_cls.notebook_context else curdoc()

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/renderer.py:240, in Renderer.get_plot(self_or_cls, obj, doc, renderer, comm, **kwargs)
    237     defaults = [kd.default for kd in plot.dimensions]
    238     init_key = tuple(v if d is None else d for v, d in
    239                      zip(plot.keys[0], defaults))
--> 240     plot.update(init_key)
    241 else:
    242     plot = obj

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/plot.py:948, in DimensionedPlot.update(self, key)
    946 def update(self, key):
    947     if len(self) == 1 and ((key == 0) or (key == self.keys[0])) and not self.drawn:
--> 948         return self.initialize_plot()
    949     item = self.__getitem__(key)
    950     self.traverse(lambda x: setattr(x, '_updated', True))

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/geoviews/plotting/bokeh/plot.py:111, in GeoPlot.initialize_plot(self, ranges, plot, plots, source)
    109 def initialize_plot(self, ranges=None, plot=None, plots=None, source=None):
    110     opts = {} if isinstance(self, HvOverlayPlot) else {'source': source}
--> 111     fig = super(GeoPlot, self).initialize_plot(ranges, plot, plots, **opts)
    112     if self.geographic and self.show_bounds and not self.overlaid:
    113         from . import GeoShapePlot

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/element.py:1388, in ElementPlot.initialize_plot(self, ranges, plot, plots, source)
   1386 # Initialize plot, source and glyph
   1387 if plot is None:
-> 1388     plot = self._init_plot(key, style_element, ranges=ranges, plots=plots)
   1389     self._init_axes(plot)
   1390 else:

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/element.py:487, in ElementPlot._init_plot(self, key, element, plots, ranges)
    480 """
    481 Initializes Bokeh figure to draw Element into and sets basic
    482 figure and axis attributes including axes types, labels,
    483 titles and plot height and width.
    484 """
    485 subplots = list(self.subplots.values()) if self.subplots else []
--> 487 axis_types, labels, plot_ranges = self._axes_props(plots, subplots, element, ranges)
    488 xlabel, ylabel, _ = labels
    489 x_axis_type, y_axis_type = axis_types

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/element.py:398, in ElementPlot._axes_props(self, plots, subplots, element, ranges)
    396 # Get the Element that determines the range and get_extents
    397 range_el = el if self.batched and not isinstance(self, OverlayPlot) else element
--> 398 l, b, r, t = self.get_extents(range_el, ranges)
    399 if self.invert_axes:
    400     l, b, r, t = b, l, t, r

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/geoviews/plotting/plot.py:73, in ProjectionPlot.get_extents(self, element, ranges, range_type)
     71     extents = None
     72 else:
---> 73     extents = project_extents(extents, element.crs, proj)
     74 return (np.NaN,)*4 if not extents else extents

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/geoviews/util.py:102, in project_extents(extents, src_proj, dest_proj, tol)
    100     geom_in_src_proj = geom_clipped_to_dest_proj
    101 try:
--> 102     geom_in_crs = dest_proj.project_geometry(geom_in_src_proj, src_proj)
    103 except ValueError:
    104     src_name =type(src_proj).__name__

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/cartopy/crs.py:808, in Projection.project_geometry(self, geometry, src_crs)
    806 if not method_name:
    807     raise ValueError(f'Unsupported geometry type {geom_type!r}')
--> 808 return getattr(self, method_name)(geometry, src_crs)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/cartopy/crs.py:944, in Projection._project_polygon(self, polygon, src_crs)
    942     is_ccw = True
    943 else:
--> 944     is_ccw = polygon.exterior.is_ccw
    945 # Project the polygon exterior/interior rings.
    946 # Each source ring will result in either a ring, or one or more
    947 # lines.
    948 rings = []

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/shapely/geometry/polygon.py:99, in LinearRing.is_ccw(self)
     96 @property
     97 def is_ccw(self):
     98     """True is the ring is oriented counter clock-wise"""
---> 99     return bool(self.impl['is_ccw'](self))

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/shapely/algorithms/cga.py:14, in is_ccw_impl.<locals>.is_ccw_op(ring)
     13 def is_ccw_op(ring):
---> 14     return signed_area(ring) >= 0.0

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/shapely/algorithms/cga.py:7, in signed_area(ring)
      3 """Return the signed area enclosed by a ring in linear time using the
      4 algorithm at: https://web.archive.org/web/20080209143651/http://cgafaq.info:80/wiki/Polygon_Area
      5 """
      6 xs, ys = ring.coords.xy
----> 7 xs.append(xs[1])
      8 ys.append(ys[1])
      9 return sum(xs[i]*(ys[i+1]-ys[i-1]) for i in range(1, len(ring.coords)))/2.0

IndexError: array index out of range
```

</details>


<details> <summary> Traceback for case 4 </summary>

```
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/IPython/core/formatters.py:973, in MimeBundleFormatter.__call__(self, obj, include, exclude)
    970     method = get_real_method(obj, self.print_method)
    972     if method is not None:
--> 973         return method(include=include, exclude=exclude)
    974     return None
    975 else:

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/core/dimension.py:1294, in Dimensioned._repr_mimebundle_(self, include, exclude)
   1287 def _repr_mimebundle_(self, include=None, exclude=None):
   1288     """
   1289     Resolves the class hierarchy for the class rendering the
   1290     object using any display hooks registered on Store.display
   1291     hooks.  The output of all registered display_hooks is then
   1292     combined and returned.
   1293     """
-> 1294     return Store.render(self)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/core/options.py:1426, in Store.render(cls, obj)
   1424 data, metadata = {}, {}
   1425 for hook in hooks:
-> 1426     ret = hook(obj)
   1427     if ret is None:
   1428         continue

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:277, in pprint_display(obj)
    275 if not ip.display_formatter.formatters['text/plain'].pprint:
    276     return None
--> 277 return display(obj, raw_output=True)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:247, in display(obj, raw_output, **kwargs)
    245 elif isinstance(obj, (CompositeOverlay, ViewableElement)):
    246     with option_state(obj):
--> 247         output = element_display(obj)
    248 elif isinstance(obj, (Layout, NdLayout, AdjointLayout)):
    249     with option_state(obj):

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:141, in display_hook.<locals>.wrapped(element)
    139 try:
    140     max_frames = OutputSettings.options['max_frames']
--> 141     mimebundle = fn(element, max_frames=max_frames)
    142     if mimebundle is None:
    143         return {}, {}

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:187, in element_display(element, max_frames)
    184 if type(element) not in Store.registry[backend]:
    185     return None
--> 187 return render(element)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/ipython/display_hooks.py:68, in render(obj, **kwargs)
     65 if renderer.fig == 'pdf':
     66     renderer = renderer.instance(fig='png')
---> 68 return renderer.components(obj, **kwargs)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/renderer.py:398, in Renderer.components(self, obj, fmt, comm, **kwargs)
    395 embed = (not (dynamic or streams or self.widget_mode == 'live') or config.embed)
    397 if embed or config.comms == 'default':
--> 398     return self._render_panel(plot, embed, comm)
    399 return self._render_ipywidget(plot)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/renderer.py:405, in Renderer._render_panel(self, plot, embed, comm)
    403 doc = Document()
    404 with config.set(embed=embed):
--> 405     model = plot.layout._render_model(doc, comm)
    406 if embed:
    407     return render_model(model, comm)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/viewable.py:505, in Renderable._render_model(self, doc, comm)
    503 if comm is None:
    504     comm = state._comm_manager.get_server_comm()
--> 505 model = self.get_root(doc, comm)
    507 if config.embed:
    508     embed_state(self, model, doc,
    509                 json=config.embed_json,
    510                 json_prefix=config.embed_json_prefix,
    511                 save_path=config.embed_save_path,
    512                 load_path=config.embed_load_path,
    513                 progress=False)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/viewable.py:556, in Renderable.get_root(self, doc, comm, preprocess)
    539 """
    540 Returns the root model and applies pre-processing hooks
    541 
   (...)
    553 Returns the bokeh model corresponding to this panel object
    554 """
    555 doc = init_doc(doc)
--> 556 root = self._get_model(doc, comm=comm)
    557 if preprocess:
    558     self._preprocess(root)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/layout/base.py:146, in Panel._get_model(self, doc, root, parent, comm)
    144 if root is None:
    145     root = model
--> 146 objects = self._get_objects(model, [], doc, root, comm)
    147 props = dict(self._init_params(), objects=objects)
    148 model.update(**self._process_param_change(props))

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/layout/base.py:131, in Panel._get_objects(self, model, old_objects, doc, root, comm)
    129 else:
    130     try:
--> 131         child = pane._get_model(doc, root, model, comm)
    132     except RerenderError:
    133         return self._get_objects(model, current_objects[:i], doc, root, comm)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/pane/holoviews.py:265, in HoloViews._get_model(self, doc, root, parent, comm)
    263     plot = self.object
    264 else:
--> 265     plot = self._render(doc, comm, root)
    267 plot.pane = self
    268 backend = plot.renderer.backend

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/panel/pane/holoviews.py:342, in HoloViews._render(self, doc, comm, root)
    339     if comm:
    340         kwargs['comm'] = comm
--> 342 return renderer.get_plot(self.object, **kwargs)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/renderer.py:70, in BokehRenderer.get_plot(self_or_cls, obj, doc, renderer, **kwargs)
     63 @bothmethod
     64 def get_plot(self_or_cls, obj, doc=None, renderer=None, **kwargs):
     65     """
     66     Given a HoloViews Viewable return a corresponding plot instance.
     67     Allows supplying a document attach the plot to, useful when
     68     combining the bokeh model with another plot.
     69     """
---> 70     plot = super().get_plot(obj, doc, renderer, **kwargs)
     71     if plot.document is None:
     72         plot.document = Document() if self_or_cls.notebook_context else curdoc()

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/renderer.py:240, in Renderer.get_plot(self_or_cls, obj, doc, renderer, comm, **kwargs)
    237     defaults = [kd.default for kd in plot.dimensions]
    238     init_key = tuple(v if d is None else d for v, d in
    239                      zip(plot.keys[0], defaults))
--> 240     plot.update(init_key)
    241 else:
    242     plot = obj

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/plot.py:948, in DimensionedPlot.update(self, key)
    946 def update(self, key):
    947     if len(self) == 1 and ((key == 0) or (key == self.keys[0])) and not self.drawn:
--> 948         return self.initialize_plot()
    949     item = self.__getitem__(key)
    950     self.traverse(lambda x: setattr(x, '_updated', True))

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/geoviews/plotting/bokeh/plot.py:111, in GeoPlot.initialize_plot(self, ranges, plot, plots, source)
    109 def initialize_plot(self, ranges=None, plot=None, plots=None, source=None):
    110     opts = {} if isinstance(self, HvOverlayPlot) else {'source': source}
--> 111     fig = super(GeoPlot, self).initialize_plot(ranges, plot, plots, **opts)
    112     if self.geographic and self.show_bounds and not self.overlaid:
    113         from . import GeoShapePlot

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/element.py:1388, in ElementPlot.initialize_plot(self, ranges, plot, plots, source)
   1386 # Initialize plot, source and glyph
   1387 if plot is None:
-> 1388     plot = self._init_plot(key, style_element, ranges=ranges, plots=plots)
   1389     self._init_axes(plot)
   1390 else:

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/element.py:487, in ElementPlot._init_plot(self, key, element, plots, ranges)
    480 """
    481 Initializes Bokeh figure to draw Element into and sets basic
    482 figure and axis attributes including axes types, labels,
    483 titles and plot height and width.
    484 """
    485 subplots = list(self.subplots.values()) if self.subplots else []
--> 487 axis_types, labels, plot_ranges = self._axes_props(plots, subplots, element, ranges)
    488 xlabel, ylabel, _ = labels
    489 x_axis_type, y_axis_type = axis_types

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/holoviews/plotting/bokeh/element.py:398, in ElementPlot._axes_props(self, plots, subplots, element, ranges)
    396 # Get the Element that determines the range and get_extents
    397 range_el = el if self.batched and not isinstance(self, OverlayPlot) else element
--> 398 l, b, r, t = self.get_extents(range_el, ranges)
    399 if self.invert_axes:
    400     l, b, r, t = b, l, t, r

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/geoviews/plotting/plot.py:73, in ProjectionPlot.get_extents(self, element, ranges, range_type)
     71     extents = None
     72 else:
---> 73     extents = project_extents(extents, element.crs, proj)
     74 return (np.NaN,)*4 if not extents else extents

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/geoviews/util.py:102, in project_extents(extents, src_proj, dest_proj, tol)
    100     geom_in_src_proj = geom_clipped_to_dest_proj
    101 try:
--> 102     geom_in_crs = dest_proj.project_geometry(geom_in_src_proj, src_proj)
    103 except ValueError:
    104     src_name =type(src_proj).__name__

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/cartopy/crs.py:808, in Projection.project_geometry(self, geometry, src_crs)
    806 if not method_name:
    807     raise ValueError(f'Unsupported geometry type {geom_type!r}')
--> 808 return getattr(self, method_name)(geometry, src_crs)

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/cartopy/crs.py:944, in Projection._project_polygon(self, polygon, src_crs)
    942     is_ccw = True
    943 else:
--> 944     is_ccw = polygon.exterior.is_ccw
    945 # Project the polygon exterior/interior rings.
    946 # Each source ring will result in either a ring, or one or more
    947 # lines.
    948 rings = []

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/shapely/geometry/polygon.py:99, in LinearRing.is_ccw(self)
     96 @property
     97 def is_ccw(self):
     98     """True is the ring is oriented counter clock-wise"""
---> 99     return bool(self.impl['is_ccw'](self))

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/shapely/algorithms/cga.py:14, in is_ccw_impl.<locals>.is_ccw_op(ring)
     13 def is_ccw_op(ring):
---> 14     return signed_area(ring) >= 0.0

File ~/miniconda3/envs/hvplot-env/lib/python3.10/site-packages/shapely/algorithms/cga.py:7, in signed_area(ring)
      3 """Return the signed area enclosed by a ring in linear time using the
      4 algorithm at: https://web.archive.org/web/20080209143651/http://cgafaq.info:80/wiki/Polygon_Area
      5 """
      6 xs, ys = ring.coords.xy
----> 7 xs.append(xs[1])
      8 ys.append(ys[1])
      9 return sum(xs[i]*(ys[i+1]-ys[i-1]) for i in range(1, len(ring.coords)))/2.0

IndexError: array index out of range
```

</details>

#### Screenshots or screencasts of the bug in action

Case 1 (which works):
![image](https://user-images.githubusercontent.com/20976035/197272892-552a2bb6-9904-418f-a81d-56dfd347fad0.png)

Case 2 (set same xlim/ylim as case 1, but remove map tile):
![image](https://user-images.githubusercontent.com/20976035/197272916-a0baa5ec-4825-4b3a-aba8-8c459d8c75b6.png)

Setting ylim works if geo=False (here ylim=(10, 72): 
![image](https://user-images.githubusercontent.com/20976035/197277013-b16fc4ab-863a-447d-bb24-103c2bc42615.png)




Discussion:
I can get it to work by moving the limits outside the initial `hvplot()` and into `.opts()`. Like this for case 3:

``` python
airports.hvplot.points('Longitude', 'Latitude', geo=True, color='red', alpha=0.2).opts(
                       xlim=(-180, -30), ylim=(10, 72))
```

When having tiles enabled, there is a change from a `Points` plot to an `Overlay` plot which probaly makes it go down a different code path.  

I think the bug is in hvplot and not in Geoviews/Holoviews.
I just ran into this same bug and I assumed that it had to do with some projection that was being applied unevenly. When I converted the dataframe and bounding box to Web Mercator `df.to_crs(epsg=3857)` it worked as expected.

Resolving patch:
diff --git a/hvplot/converter.py b/hvplot/converter.py
--- a/hvplot/converter.py
+++ b/hvplot/converter.py
@@ -230,6 +230,9 @@ class HoloViewsConverter:
         Whether to project the data before plotting (adds initial
         overhead but avoids projecting data when plot is dynamically
         updated).
+    projection (default=None): str or Cartopy CRS
+        Coordinate reference system of the plot specified as Cartopy
+        CRS object or class name.
     tiles (default=False):
         Whether to overlay the plot on a tile source. Tiles sources
         can be selected by name or a tiles object or class can be passed,
@@ -255,7 +258,8 @@ class HoloViewsConverter:
     ]
 
     _geo_options = [
-        'geo', 'crs', 'features', 'project', 'coastline', 'tiles'
+        'geo', 'crs', 'features', 'project', 'coastline', 'tiles',
+        'projection', 'global_extents'
     ]
 
     _axis_options = [
@@ -393,7 +397,7 @@ def __init__(
         )
 
         self.dynamic = dynamic
-        self.geo = any([geo, crs, global_extent, projection, project, coastline, features])
+        self.geo = any([geo, crs, global_extent, projection, project, coastline, features, tiles])
         self.crs = self._process_crs(data, crs) if self.geo else None
         self.project = project
         self.coastline = coastline
@@ -434,13 +438,20 @@ def __init__(
                         "Projection must be defined as cartopy CRS or "
                         "one of the following CRS string:\n {}".format(all_crs))
 
-            proj_crs = projection or ccrs.GOOGLE_MERCATOR
-            if self.crs != proj_crs:
+            projection = projection or (ccrs.GOOGLE_MERCATOR if tiles else self.crs)
+            if tiles and projection != ccrs.GOOGLE_MERCATOR:
+                raise ValueError(
+                    "Tiles can only be used with output projection of "
+                    "`cartopy.crs.GOOGLE_MERCATOR`. To get rid of this error "
+                    "remove `projection=` or `tiles=`"
+                )
+
+            if self.crs != projection:
                 px0, py0, px1, py1 = ccrs.GOOGLE_MERCATOR.boundary.bounds
                 x0, x1 = xlim or (px0, px1)
                 y0, y1 = ylim or (py0, py1)
                 extents = (x0, y0, x1, y1)
-                x0, y0, x1, y1 = project_extents(extents, self.crs, proj_crs)
+                x0, y0, x1, y1 = project_extents(extents, self.crs, projection)
                 if xlim:
                     xlim = (x0, x1)
                 if ylim:


Test patch:
diff --git a/hvplot/tests/testgeo.py b/hvplot/tests/testgeo.py
--- a/hvplot/tests/testgeo.py
+++ b/hvplot/tests/testgeo.py
@@ -107,6 +107,11 @@ def test_plot_with_projection_as_invalid_string(self):
         with self.assertRaisesRegex(ValueError, "Projection must be defined"):
             self.da.hvplot.image('x', 'y', projection='foo')
 
+    def test_plot_with_projection_raises_an_error_when_tiles_set(self):
+        da = self.da.copy()
+        with self.assertRaisesRegex(ValueError, "Tiles can only be used with output projection"):
+            da.hvplot.image('x', 'y', crs=self.crs, projection='Robinson', tiles=True)
+
 
 class TestGeoAnnotation(TestCase):
 
@@ -274,6 +279,12 @@ def test_points_hover_cols_with_by_set_to_name(self):
         assert points.kdims == ['x', 'y']
         assert points.vdims == ['name']
 
+    def test_points_project_xlim_and_ylim(self):
+        points = self.cities.hvplot(geo=True, xlim=(-10, 10), ylim=(-20, -10))
+        opts = hv.Store.lookup_options('bokeh', points, 'plot').options
+        assert opts['xlim'] == (-10, 10)
+        assert opts['ylim'] == (-20, -10)
+
     @pytest.mark.xfail(
         reason='Waiting for upstream fix https://github.com/holoviz/holoviews/pull/5325',
         raises=KeyError,