cartopy icon indicating copy to clipboard operation
cartopy copied to clipboard

`GeoAxes.set_boundary` failed in smaller extent

Open ZhaJiMan opened this issue 1 year ago • 4 comments

Description

I want to use a circle bondary in a Plate Carrée map, and I found that in big extent (like set_global) it worked, but in smaller extent it failed. The same problem also occurred in a Lambert comformal map.

Code to reproduce

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
import cartopy.crs as ccrs
from cartopy.feature import LAND, OCEAN

crs = ccrs.PlateCarree()
fig = plt.figure()
ax = fig.add_subplot(projection=crs)
ax.set_global()
ax.stock_img()

r = 0.5
t = np.linspace(0, 2 * np.pi, 100)
x = r * np.cos(t) + 0.5
y = r * np.sin(t) + 0.5
verts = np.column_stack([x, y])
path = Path(verts)

ax.set_boundary(path, ax.transAxes)
plt.show()

image

But the boundary would not show in [60, 130, 0, 60] range.

ax.set_extent([60, 130, 0, 60], crs=crs)

image

Full environment definition

Operating system

Windows 11

Cartopy version

0.21.0

conda list

# Name                    Version                   Build  Channel
_ipython_minor_entry_point 8.7.0                h8cf3c4a_0    conda-forge
_py-xgboost-mutex         2.0                       cpu_0    conda-forge
ansicon                   1.89.0           py39hcbf5309_6    conda-forge
anyio                     3.5.0            py39haa95532_0    defaults
appdirs                   1.4.4              pyh9f0ad1d_0    conda-forge
argon2-cffi               21.3.0             pyhd3eb1b0_0    defaults
argon2-cffi-bindings      21.2.0           py39h2bbff1b_0    defaults
asttokens                 2.2.1              pyhd8ed1ab_0    conda-forge
attrs                     22.1.0             pyh71513ae_1    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
backports                 1.0                pyhd8ed1ab_3    conda-forge
backports.functools_lru_cache 1.6.4              pyhd8ed1ab_0    conda-forge
bcrypt                    3.2.2            py39ha55989b_1    conda-forge
beautifulsoup4            4.11.1           py39haa95532_0    defaults
blas                      1.0                         mkl    defaults
bleach                    4.1.0              pyhd3eb1b0_0    defaults
blessed                   1.19.1             pyh95a074a_2    conda-forge
blosc                     1.21.1               h74325e0_3    conda-forge
bokeh                     2.4.3              pyhd8ed1ab_3    conda-forge
boost-cpp                 1.78.0               h9f4b32c_1    conda-forge
bottleneck                1.3.5            py39hc266a54_1    conda-forge
branca                    0.6.0              pyhd8ed1ab_0    conda-forge
brotli                    1.0.9                hcfcfb64_8    conda-forge
brotli-bin                1.0.9                hcfcfb64_8    conda-forge
brotlipy                  0.7.0           py39h2bbff1b_1003    https://repo.anaconda.com/pkgs/main
bzip2                     1.0.8                h8ffe710_4    conda-forge
ca-certificates           2022.12.7            h5b45459_0    conda-forge
cached-property           1.5.2                hd8ed1ab_1    conda-forge
cached_property           1.5.2              pyha770c72_1    conda-forge
cairo                     1.16.0            hd694305_1014    conda-forge
cartopy                   0.21.0           py39h25ee47b_3    conda-forge
certifi                   2022.12.7          pyhd8ed1ab_0    conda-forge
cffi                      1.15.0           py39h2bbff1b_1    https://repo.anaconda.com/pkgs/main
cfgrib                    0.9.10.3           pyhd8ed1ab_0    conda-forge
cfitsio                   4.2.0                h9ebe7e4_0    conda-forge
cftime                    1.6.2            py39hc266a54_1    conda-forge
charset-normalizer        2.0.4              pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
click                     8.1.3           win_pyhd8ed1ab_2    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
cmarkgfm                  0.8.0            py39ha55989b_2    conda-forge
colorama                  0.4.4              pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
commonmark                0.9.1                      py_0    conda-forge
conda                     4.12.0           py39haa95532_0    https://repo.anaconda.com/pkgs/main
conda-content-trust       0.1.1              pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
conda-package-handling    1.8.1            py39h8cc25b3_0    https://repo.anaconda.com/pkgs/main
console_shortcut          0.1.1                         4    https://repo.anaconda.com/pkgs/main
contourpy                 1.0.6            py39h1f6ef14_0    conda-forge
cryptography              36.0.0           py39h21b164f_0    https://repo.anaconda.com/pkgs/main
cuda                      11.6.2                        0    nvidia
cuda-cccl                 11.6.55                       0    nvidia
cuda-command-line-tools   11.6.2                        0    nvidia
cuda-compiler             11.6.2                        0    nvidia
cuda-cudart               11.6.55                       0    nvidia
cuda-cudart-dev           11.6.55                       0    nvidia
cuda-cuobjdump            11.6.124                      0    nvidia
cuda-cupti                11.6.124                      0    nvidia
cuda-cuxxfilt             11.6.124                      0    nvidia
cuda-libraries            11.6.2                        0    nvidia
cuda-libraries-dev        11.6.2                        0    nvidia
cuda-memcheck             11.8.86                       0    nvidia
cuda-nsight-compute       11.8.0                        0    nvidia
cuda-nvcc                 11.6.124                      0    nvidia
cuda-nvdisasm             11.8.86                       0    nvidia
cuda-nvml-dev             11.6.55                       0    nvidia
cuda-nvprof               11.8.87                       0    nvidia
cuda-nvprune              11.6.124                      0    nvidia
cuda-nvrtc                11.6.124                      0    nvidia
cuda-nvrtc-dev            11.6.124                      0    nvidia
cuda-nvtx                 11.6.124                      0    nvidia
cuda-nvvp                 11.8.87                       0    nvidia
cuda-runtime              11.6.2                        0    nvidia
cuda-sanitizer-api        11.8.86                       0    nvidia
cuda-toolkit              11.6.2                        0    nvidia
cuda-tools                11.6.2                        0    nvidia
cuda-visual-tools         11.6.2                        0    nvidia
curl                      7.86.0               heaf79c2_1    conda-forge
cycler                    0.11.0             pyhd8ed1ab_0    conda-forge
cytoolz                   0.12.0           py39ha55989b_1    conda-forge
dask                      2022.12.0          pyhd8ed1ab_0    conda-forge
dask-core                 2022.12.0          pyhd8ed1ab_0    conda-forge
dataclasses               0.8                pyhc8e2a94_3    conda-forge
debugpy                   1.5.1            py39hd77b12b_0    defaults
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
defusedxml                0.7.1              pyhd3eb1b0_0    defaults
dill                      0.3.6              pyhd8ed1ab_1    conda-forge
distributed               2022.12.0          pyhd8ed1ab_0    conda-forge
docutils                  0.19             py39hcbf5309_1    conda-forge
eccodes                   2.27.1               hf38be0f_0    conda-forge
entrypoints               0.4              py39haa95532_0    defaults
et_xmlfile                1.0.1                   py_1001    conda-forge
executing                 1.2.0              pyhd8ed1ab_0    conda-forge
expat                     2.5.0                h1537add_0    conda-forge
fftw                      3.3.9                h2bbff1b_1    defaults
findlibs                  0.0.2              pyhd8ed1ab_0    conda-forge
fiona                     1.8.22           py39h9e0966e_2    conda-forge
flit-core                 3.6.0              pyhd3eb1b0_0    defaults
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.1               hbde0cde_0    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.38.0           py39ha55989b_1    conda-forge
freeglut                  3.2.2                h0e60522_1    conda-forge
freetype                  2.12.1               h546665d_1    conda-forge
freexl                    1.0.6                h67ca5e6_1    conda-forge
fsspec                    2022.11.0          pyhd8ed1ab_0    conda-forge
future                    0.18.2             pyhd8ed1ab_6    conda-forge
gdal                      3.5.3            py39h34c8707_8    conda-forge
geopandas                 0.12.1             pyhd8ed1ab_1    conda-forge
geopandas-base            0.12.1             pyha770c72_1    conda-forge
geos                      3.11.1               h1537add_0    conda-forge
geotiff                   1.7.1                h4ffd875_4    conda-forge
gettext                   0.21.1               h5728263_0    conda-forge
gpustat                   1.0.0              pyhd8ed1ab_0    conda-forge
h5py                      3.7.0           nompi_py39hbc6f334_102    conda-forge
hdf4                      4.2.15               h1b1b6ef_5    conda-forge
hdf5                      1.12.2          nompi_h2a0e4a3_100    conda-forge
heapdict                  1.0.1                      py_0    conda-forge
icc_rt                    2022.1.0             h6049295_2    defaults
icu                       70.1                 h0e60522_0    conda-forge
idna                      3.3                pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
importlib-metadata        5.1.0              pyha770c72_0    conda-forge
importlib_metadata        5.1.0                hd8ed1ab_0    conda-forge
importlib_resources       5.10.0             pyhd8ed1ab_0    conda-forge
intel-openmp              2021.4.0          haa95532_3556    defaults
ipdb                      0.13.9             pyhd8ed1ab_0    conda-forge
ipykernel                 6.15.2           py39haa95532_0    defaults
ipympl                    0.8.7              pyhd3eb1b0_0    defaults
ipython                   8.7.0              pyh08f2357_0    conda-forge
ipython_genutils          0.2.0              pyhd3eb1b0_1    defaults
ipywidgets                7.6.5              pyhd3eb1b0_1    defaults
jaraco.classes            3.2.3              pyhd8ed1ab_0    conda-forge
jasper                    2.0.33               h77af90b_0    conda-forge
jedi                      0.18.2             pyhd8ed1ab_0    conda-forge
jinja2                    3.1.2              pyhd8ed1ab_1    conda-forge
jinxed                    1.2.0              pyh95a074a_0    conda-forge
joblib                    1.2.0              pyhd8ed1ab_0    conda-forge
jpeg                      9e                   h8ffe710_2    conda-forge
jplephem                  2.18               pyh78acc04_0    conda-forge
jsonschema                4.16.0           py39haa95532_0    defaults
jupyter_client            7.4.7            py39haa95532_0    defaults
jupyter_core              4.11.2           py39haa95532_0    defaults
jupyter_server            1.18.1           py39haa95532_0    defaults
jupyterlab_pygments       0.1.2                      py_0    defaults
jupyterlab_widgets        1.0.0              pyhd3eb1b0_1    defaults
kealib                    1.5.0                h61be68b_0    conda-forge
keyring                   23.11.0          py39hcbf5309_0    conda-forge
kiwisolver                1.4.4            py39h1f6ef14_1    conda-forge
krb5                      1.19.3               h1176d77_0    conda-forge
lcms2                     2.14                 h90d422f_0    conda-forge
lerc                      4.0.0                h63175ca_0    conda-forge
libaec                    1.0.6                h39d44d4_0    conda-forge
libbrotlicommon           1.0.9                hcfcfb64_8    conda-forge
libbrotlidec              1.0.9                hcfcfb64_8    conda-forge
libbrotlienc              1.0.9                hcfcfb64_8    conda-forge
libcublas                 11.11.3.6                     0    nvidia
libcublas-dev             11.11.3.6                     0    nvidia
libcufft                  10.9.0.58                     0    nvidia
libcufft-dev              10.9.0.58                     0    nvidia
libcurand                 10.3.0.86                     0    nvidia
libcurand-dev             10.3.0.86                     0    nvidia
libcurl                   7.86.0               heaf79c2_1    conda-forge
libcusolver               11.4.1.48                     0    nvidia
libcusolver-dev           11.4.1.48                     0    nvidia
libcusparse               11.7.5.86                     0    nvidia
libcusparse-dev           11.7.5.86                     0    nvidia
libdeflate                1.14                 hcfcfb64_0    conda-forge
libffi                    3.4.2                h8ffe710_5    conda-forge
libgdal                   3.5.3                h74b97fb_8    conda-forge
libglib                   2.74.1               he8f3873_1    conda-forge
libiconv                  1.17                 h8ffe710_0    conda-forge
libkml                    1.3.0             hf2ab4e4_1015    conda-forge
libnetcdf                 4.8.1           nompi_h8c042bf_106    conda-forge
libnpp                    11.8.0.86                     0    nvidia
libnpp-dev                11.8.0.86                     0    nvidia
libnvjpeg                 11.9.0.86                     0    nvidia
libnvjpeg-dev             11.9.0.86                     0    nvidia
libpng                    1.6.39               h19919ed_0    conda-forge
libpq                     15.1                 h04fd8be_1    conda-forge
librttopo                 1.1.0               he22b5cd_12    conda-forge
libsodium                 1.0.18               h62dcd97_0    defaults
libspatialindex           1.9.3                h39d44d4_4    conda-forge
libspatialite             5.0.1               h07bf483_22    conda-forge
libsqlite                 3.40.0               hcfcfb64_0    conda-forge
libssh2                   1.10.0               h680486a_3    conda-forge
libtiff                   4.4.0                h8e97e67_4    conda-forge
libuv                     1.40.0               he774522_0    defaults
libwebp-base              1.2.4                h8ffe710_0    conda-forge
libxcb                    1.13              hcd874cb_1004    conda-forge
libxgboost                1.7.1            cpu_h20390bd_0    conda-forge
libxml2                   2.10.3               hc3477c8_0    conda-forge
libzip                    1.9.2                hfed4ece_1    conda-forge
libzlib                   1.2.13               hcfcfb64_4    conda-forge
lightgbm                  3.3.3            py39h99910a6_1    conda-forge
line_profiler             4.0.1            py39h748ffb7_0    conda-forge
locket                    1.0.0              pyhd8ed1ab_0    conda-forge
lz4                       4.0.2            py39hf617134_0    conda-forge
lz4-c                     1.9.3                h8ffe710_1    conda-forge
m2w64-gcc-libgfortran     5.3.0                         6    conda-forge
m2w64-gcc-libs            5.3.0                         7    conda-forge
m2w64-gcc-libs-core       5.3.0                         7    conda-forge
m2w64-gmp                 6.1.0                         2    conda-forge
m2w64-libwinpthread-git   5.0.0.4634.697f757               2    conda-forge
mapclassify               2.4.3              pyhd8ed1ab_0    conda-forge
mapie                     0.5.0              pyhd8ed1ab_0    conda-forge
markupsafe                2.1.1            py39ha55989b_2    conda-forge
matplotlib-base           3.6.2            py39haf65ace_0    conda-forge
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
memory_profiler           0.61.0             pyhd8ed1ab_0    conda-forge
menuinst                  1.4.18           py39h59b6b97_0    https://repo.anaconda.com/pkgs/main
metpy                     1.3.1              pyhd8ed1ab_0    conda-forge
missingno                 0.4.2                      py_1    conda-forge
mistune                   0.8.4           py39h2bbff1b_1000    defaults
mkl                       2021.4.0           haa95532_640    defaults
mkl-service               2.4.0            py39h2bbff1b_0    defaults
mkl_fft                   1.3.1            py39h277e83a_0    defaults
mkl_random                1.2.2            py39hf11a4ad_0    defaults
more-itertools            9.0.0              pyhd8ed1ab_0    conda-forge
msgpack-python            1.0.4            py39h1f6ef14_1    conda-forge
msys2-conda-epoch         20160418                      1    conda-forge
munch                     2.5.0                      py_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
nbclassic                 0.4.8            py39haa95532_0    defaults
nbclient                  0.5.13           py39haa95532_0    defaults
nbconvert                 6.4.4            py39haa95532_0    defaults
nbformat                  5.5.0            py39haa95532_0    defaults
nest-asyncio              1.5.5            py39haa95532_0    defaults
netcdf4                   1.6.2           nompi_py39h34fa13a_100    conda-forge
networkx                  2.8.8              pyhd8ed1ab_0    conda-forge
notebook                  6.5.2            py39haa95532_0    defaults
notebook-shim             0.2.2            py39haa95532_0    defaults
nsight-compute            2022.3.0.22                   0    nvidia
numexpr                   2.8.4            py39h5b0cc5e_0    defaults
numpy                     1.23.4           py39h3b20f71_0    defaults
numpy-base                1.23.4           py39h4da318b_0    defaults
nvidia-ml-py              11.495.46          pyhd8ed1ab_0    conda-forge
opencc                    1.1.1                    pypi_0    pypi
openjpeg                  2.5.0                hc9384bd_1    conda-forge
openpyxl                  3.0.10           py39ha55989b_2    conda-forge
openssl                   1.1.1t               hcfcfb64_0    conda-forge
packaging                 21.3               pyhd3eb1b0_0    defaults
pandas                    1.5.1            py39hf11a4ad_0    defaults
pandocfilters             1.5.0              pyhd3eb1b0_0    defaults
paramiko                  3.0.0              pyhd8ed1ab_0    conda-forge
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
partd                     1.3.0              pyhd8ed1ab_0    conda-forge
patsy                     0.5.3              pyhd8ed1ab_0    conda-forge
pcre2                     10.40                h17e33f8_0    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    9.2.0            py39h595c93f_3    conda-forge
pint                      0.20.1             pyhd8ed1ab_0    conda-forge
pip                       21.2.4           py39haa95532_0    https://repo.anaconda.com/pkgs/main
pixman                    0.40.0               h8ffe710_0    conda-forge
pkginfo                   1.9.2              pyhd8ed1ab_0    conda-forge
pooch                     1.6.0              pyhd8ed1ab_0    conda-forge
poppler                   22.11.0              ha6c1112_0    conda-forge
poppler-data              0.4.11               hd8ed1ab_0    conda-forge
portalocker               2.3.0            py39haa95532_0    defaults
postgresql                15.1                 h392df6f_1    conda-forge
powershell_shortcut       0.0.1                         3    https://repo.anaconda.com/pkgs/main
prcoords                  1.0.2                    pypi_0    pypi
proj                      9.1.0                h3863b3b_0    conda-forge
prometheus_client         0.14.1           py39haa95532_0    defaults
prompt-toolkit            3.0.33             pyha770c72_0    conda-forge
psutil                    5.9.0            py39h2bbff1b_0    defaults
pthread-stubs             0.4               hcd874cb_1001    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
py-xgboost                1.7.1           cpu_py39ha538f94_0    conda-forge
pycosat                   0.6.3            py39h2bbff1b_0    https://repo.anaconda.com/pkgs/main
pycparser                 2.21               pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
pygments                  2.13.0             pyhd8ed1ab_0    conda-forge
pygrib                    2.1.4            py39hb97199f_6    conda-forge
pyhdf                     0.10.5           py39h1ab0bd0_1    conda-forge
pykrige                   1.7.0            py39ha55989b_1    conda-forge
pynacl                    1.5.0            py39h09fa780_2    conda-forge
pyopenssl                 22.0.0             pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
pyparsing                 3.0.9            py39haa95532_0    defaults
pyproj                    3.4.0            py39h9727d73_2    conda-forge
pyrsistent                0.18.0           py39h196d8e1_0    defaults
pyshp                     2.3.1              pyhd8ed1ab_0    conda-forge
pysocks                   1.7.1            py39haa95532_0    https://repo.anaconda.com/pkgs/main
python                    3.9.12               h6244533_0    https://repo.anaconda.com/pkgs/main
python-dateutil           2.8.2              pyhd3eb1b0_0    defaults
python-eccodes            1.4.2            py39hc266a54_1    conda-forge
python-fastjsonschema     2.16.2           py39haa95532_0    defaults
python_abi                3.9                      2_cp39    conda-forge
pytorch                   1.13.0          py3.9_cuda11.6_cudnn8_0    pytorch
pytorch-cuda              11.6                 h867d48c_0    pytorch
pytorch-mutex             1.0                        cuda    pytorch
pytz                      2022.1           py39haa95532_0    defaults
pywavelets                1.3.0            py39hc266a54_2    conda-forge
pywin32                   302              py39h2bbff1b_2    https://repo.anaconda.com/pkgs/main
pywin32-ctypes            0.2.0           py39hcbf5309_1006    conda-forge
pywinpty                  2.0.2            py39h5da7b33_0    defaults
pyyaml                    6.0              py39ha55989b_5    conda-forge
pyzmq                     23.2.0           py39hd77b12b_0    defaults
readme_renderer           37.3               pyhd8ed1ab_0    conda-forge
requests                  2.27.1             pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
requests-toolbelt         0.10.1             pyhd8ed1ab_0    conda-forge
rfc3986                   2.0.0              pyhd8ed1ab_0    conda-forge
rich                      12.6.0             pyhd8ed1ab_0    conda-forge
rtree                     1.0.1            py39h09fdee3_1    conda-forge
ruamel_yaml               0.15.100         py39h2bbff1b_0    https://repo.anaconda.com/pkgs/main
scikit-learn              1.1.3            py39hd77b12b_0    defaults
scipy                     1.9.3            py39he11b74f_0    defaults
seaborn                   0.12.1               hd8ed1ab_0    conda-forge
seaborn-base              0.12.1             pyhd8ed1ab_0    conda-forge
send2trash                1.8.0              pyhd3eb1b0_1    defaults
setuptools                61.2.0           py39haa95532_0    https://repo.anaconda.com/pkgs/main
sgp4                      2.21             py39hbd792c9_2    conda-forge
shapely                   1.8.5            py39h7c5f289_2    conda-forge
six                       1.16.0             pyhd3eb1b0_1    https://repo.anaconda.com/pkgs/main
skyfield                  1.45               pyh1a96a4e_0    conda-forge
snakeviz                  2.1.1              pyhd8ed1ab_0    conda-forge
snappy                    1.1.9                hfb803bf_2    conda-forge
sniffio                   1.2.0            py39haa95532_1    defaults
sortedcontainers          2.4.0              pyhd8ed1ab_0    conda-forge
soupsieve                 2.3.2.post1      py39haa95532_0    defaults
sqlite                    3.40.0               hcfcfb64_0    conda-forge
stack_data                0.6.2              pyhd8ed1ab_0    conda-forge
statsmodels               0.13.5           py39hc266a54_2    conda-forge
tblib                     1.7.0              pyhd8ed1ab_0    conda-forge
terminado                 0.13.1           py39haa95532_0    defaults
testpath                  0.6.0            py39haa95532_0    defaults
threadpoolctl             3.1.0              pyh8a188c0_0    conda-forge
tiledb                    2.11.3               h5689973_1    conda-forge
tk                        8.6.12               h8ffe710_0    conda-forge
toolz                     0.12.0             pyhd8ed1ab_0    conda-forge
torchaudio                0.13.0                   pypi_0    pypi
torchdata                 0.5.0                      py39    pytorch
torchtext                 0.14.0                     py39    pytorch
torchvision               0.14.0                   pypi_0    pypi
tornado                   6.2              py39h2bbff1b_0    defaults
tqdm                      4.63.0             pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
traitlets                 5.6.0              pyhd8ed1ab_0    conda-forge
twine                     4.0.2              pyhd8ed1ab_0    conda-forge
typing-extensions         4.4.0            py39haa95532_0    defaults
typing_extensions         4.4.0            py39haa95532_0    defaults
tzdata                    2022a                hda174b7_0    https://repo.anaconda.com/pkgs/main
ucrt                      10.0.22621.0         h57928b3_0    conda-forge
unicodedata2              15.0.0           py39ha55989b_0    conda-forge
urllib3                   1.26.8             pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
vc                        14.2                 h21ff451_1    https://repo.anaconda.com/pkgs/main
vs2015_runtime            14.32.31332          h1d6e394_9    conda-forge
wcwidth                   0.2.5              pyh9f0ad1d_2    conda-forge
webencodings              0.5.1            py39haa95532_1    defaults
websocket-client          0.58.0           py39haa95532_4    defaults
wheel                     0.37.1             pyhd3eb1b0_0    https://repo.anaconda.com/pkgs/main
widgetsnbextension        3.5.2            py39haa95532_0    defaults
win_inet_pton             1.1.0            py39haa95532_0    https://repo.anaconda.com/pkgs/main
wincertstore              0.2              py39haa95532_2    https://repo.anaconda.com/pkgs/main
winpty                    0.4.3                         4    defaults
wrapt                     1.15.0           py39ha55989b_0    conda-forge
wrf-python                1.3.4.1          py39heacfe52_3    conda-forge
xarray                    2022.12.0          pyhd8ed1ab_0    conda-forge
xerces-c                  3.2.4                h63175ca_1    conda-forge
xgboost                   1.7.1           cpu_py39ha538f94_0    conda-forge
xlrd                      2.0.1              pyhd8ed1ab_3    conda-forge
xorg-libxau               1.0.9                hcd874cb_0    conda-forge
xorg-libxdmcp             1.1.3                hcd874cb_0    conda-forge
xyzservices               2022.9.0           pyhd8ed1ab_0    conda-forge
xz                        5.2.6                h8d14728_0    conda-forge
yaml                      0.2.5                he774522_0    https://repo.anaconda.com/pkgs/main
zeromq                    4.3.4                hd77b12b_0    defaults
zict                      2.2.0              pyhd8ed1ab_0    conda-forge
zipp                      3.11.0             pyhd8ed1ab_0    conda-forge
zlib                      1.2.13               hcfcfb64_4    conda-forge
zstd                      1.5.2                h7755175_4    conda-forge

ZhaJiMan avatar May 08 '23 08:05 ZhaJiMan

I suspect this is a bug. Using your example, setting the first term in set_extent to be between 0 and 1 (for instance, 0.6 in the image below), progressively adjusts the boundary; at 1 the whole panel is blank, then >1 the boundary is ignored. That makes me think somehow ax.transAxes in set_boundary is affecting the call to set_extent. fig1_c

lgolston avatar Jun 10 '23 18:06 lgolston

A work around is to use data coordinates instead:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
import cartopy.crs as ccrs
from cartopy.feature import LAND, OCEAN

crs = ccrs.PlateCarree()
fig = plt.figure()
ax = fig.add_subplot(projection=crs)
ax.stock_img()

theta = np.linspace(0, 2*np.pi, 100)
center, radius = [95, 30], 30
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = Path(verts * radius + center)

ax.set_extent([60, 130, 0, 60], crs=crs)
ax.set_boundary(circle, transform=ax.transData)

plt.show()

fig2

lgolston avatar Jun 10 '23 18:06 lgolston

Another workaround is to set up the axes with a different central longitude:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
import cartopy.crs as ccrs

crs = ccrs.PlateCarree()
fig = plt.figure()
ax = fig.add_subplot(projection=ccrs.PlateCarree(central_longitude=90))
ax.set_extent([60, 130, 0, 60], crs=crs)
ax.stock_img()

r = 0.5
t = np.linspace(0, 2 * np.pi, 100)
x = r * np.cos(t) + 0.5
y = r * np.sin(t) + 0.5
verts = np.column_stack([x, y])
path = Path(verts)

ax.set_boundary(path, ax.transAxes)
plt.show()

image

rcomer avatar Feb 24 '24 15:02 rcomer

Thanks for workarounds. I found that ax.set_boundary will set the _original_path attribute for ax.patch and ax.spines['geo']. And in their _adjust_location methods there are

class _ViewClippedPathPatch(mpatches.PathPatch):
    def _adjust_location(self):
        if self.stale:
            self.set_path(self._original_path.clip_to_bbox(self.axes.viewLim))
            # Some places in matplotlib's transform stack cache the actual
            # path so we trigger an update by invalidating the transform.
            self._trans_wrap.invalidate()

class GeoSpine(mspines.Spine):
    def _adjust_location(self):
        if self.stale:
            self._path = self._original_path.clip_to_bbox(self.axes.viewLim)
            self._path = mpath.Path(self._path.vertices, closed=True)

The problem arises from the self._original_path.clip_to_bbox(self.axes.viewLim), which will clip the _original_path using ax.viewLim. The coordinates of _original_path are between 0.0 and 1.0 due to ax.transAxes transform, but the coordinates of ax.viewLim correspond to the values of extent. In my case where extents = [60, 130, 0, 60], the 0 to 1 circle is out of the range, so ax.patch and ax.spines['geo'] will have empty _path attributes making the spines disappear. This also exlains the half plot in @lgolston example and why changing central_longitude works.

In addition to using transData, I tried removing the clip_to_bbox line and it worked:

class _ViewClippedPathPatch(mpatches.PathPatch):
    def _adjust_location(self):
        if self.stale:
            # self.set_path(self._original_path.clip_to_bbox(self.axes.viewLim))
            self._path = self._original_path
            # Some places in matplotlib's transform stack cache the actual
            # path so we trigger an update by invalidating the transform.
            self._trans_wrap.invalidate()

class GeoSpine(mspines.Spine):
    def _adjust_location(self):
        if self.stale:
            # self._path = self._original_path.clip_to_bbox(self.axes.viewLim)
            self._path = self._original_path
            self._path = mpath.Path(self._path.vertices, closed=True)

ZhaJiMan avatar Feb 27 '24 02:02 ZhaJiMan