From c2a5a6157850c3db076a78861a208f729d83b0af Mon Sep 17 00:00:00 2001 From: Clarmy Lee Date: Thu, 2 Apr 2026 16:31:36 +0800 Subject: [PATCH] Add imshow clipping support for #56 --- .../codex/cnmaps-python-assistant/SKILL.md | 1 + .../references/api-cheatsheet.md | 4 ++ .../references/plotting-patterns.md | 33 +++++++++++++++ cnmaps/drawing.py | 20 +++++++++ docs/source/_static/clip-china-hillshade.png | Bin 0 -> 77174 bytes docs/source/content/api-ref.rst | 17 ++++++++ docs/source/content/usage.rst | 37 +++++++++++++++++ tests/test_docs_examples.py | 23 ++++++++++- tests/test_drawing.py | 38 ++++++++++++++++++ 9 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 docs/source/_static/clip-china-hillshade.png diff --git a/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/SKILL.md b/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/SKILL.md index df047f5..4761903 100644 --- a/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/SKILL.md +++ b/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/SKILL.md @@ -42,6 +42,7 @@ If the user is mixing `cnmaps` with scientific Python or GIS tooling and the res - Draw multiple records or polygons: `draw_maps` - Clip `contourf`: `clip_contours_by_map` - Clip `pcolormesh`: `clip_pcolormesh_by_map` +- Clip `imshow` / hillshade images: `clip_imshow_by_map` - Clip `quiver`: `clip_quiver_by_map` - Clip `scatter`: `clip_scatter_by_map` - Clip contour labels: `clip_clabels_by_map` diff --git a/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/api-cheatsheet.md b/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/api-cheatsheet.md index cd390e3..987c34c 100644 --- a/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/api-cheatsheet.md +++ b/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/api-cheatsheet.md @@ -161,6 +161,10 @@ Use after `ax.pcolormesh`. Use after `ax.quiver`. +### `clip_imshow_by_map(image, map_polygon, ax=None, extent=None, set_extent=False)` + +Use after `ax.imshow`, especially for hillshade or RGB image layers created from DEM data. + ### `clip_streamplot_by_map(streamplot, map_polygon, ax=None, extent=None, set_extent=False)` Use after `ax.streamplot`. diff --git a/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/plotting-patterns.md b/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/plotting-patterns.md index f90a3f4..789dcd9 100644 --- a/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/plotting-patterns.md +++ b/cnmaps/_bundled_skills/platforms/codex/cnmaps-python-assistant/references/plotting-patterns.md @@ -267,6 +267,39 @@ draw_map(china, ax=ax, color="black", linewidth=1.0) plt.show() ``` +## Clip Hillshade Or Imshow Images + +```python +import cartopy.crs as ccrs +import matplotlib.pyplot as plt +from matplotlib.colors import LightSource +from cnmaps import clip_imshow_by_map, draw_map, get_adm_maps +from cnmaps.sample import load_dem + +lons, lats, dem = load_dem() +hillshade = LightSource(azdeg=315, altdeg=45).shade( + dem, + cmap=plt.cm.Greys, + vert_exag=0.8, + blend_mode="overlay", +) +china = get_adm_maps(country="中国", level="国", record="first", only_polygon=True) + +fig = plt.figure(figsize=(10, 10)) +ax = fig.add_subplot(111, projection=ccrs.PlateCarree()) +image = ax.imshow( + hillshade, + extent=[lons.min(), lons.max(), lats.min(), lats.max()], + origin="lower", + transform=ccrs.PlateCarree(), +) + +clip_imshow_by_map(image, china) +draw_map(china, ax=ax, color="black", linewidth=1.0) +ax.set_extent(china.get_extent(), crs=ccrs.PlateCarree()) +plt.show() +``` + ## Clip Streamlines ```python diff --git a/cnmaps/drawing.py b/cnmaps/drawing.py index f595c4b..095817b 100644 --- a/cnmaps/drawing.py +++ b/cnmaps/drawing.py @@ -180,6 +180,26 @@ def clip_pcolormesh_by_map(mesh, map_polygon: MapPolygon, ax=None, extent=None, _set_clip_box_if_possible(mesh, ax) +def clip_imshow_by_map(image, map_polygon: MapPolygon, ax=None, extent=None, set_extent=False): + """ + 使用边界几何裁剪 `ax.imshow()` 返回的图像对象。 + + 参数: + image: `ax.imshow()` 的返回对象。 + map_polygon (MapPolygon): 地图边界对象。 + ax (GeoAxes, 可选): 目标坐标轴。 + extent (tuple, 可选): 可选裁剪范围。 + set_extent (bool, 可选): 是否同步设置坐标轴范围。 + """ + ax = _resolve_axes(image, ax=ax) + + clip = _make_clip_path(map_polygon, ax=ax, extent=extent) + _set_extent_if_needed(ax, extent=extent, set_extent=set_extent) + + image.set_clip_path(clip) + _set_clip_box_if_possible(image, ax) + + def clip_quiver_by_map(quiver, map_polygon: MapPolygon, ax=None, extent=None, set_extent=False): """ 使用边界几何裁剪 `ax.quiver()` 返回的箭矢对象。 diff --git a/docs/source/_static/clip-china-hillshade.png b/docs/source/_static/clip-china-hillshade.png new file mode 100644 index 0000000000000000000000000000000000000000..79f236167fb51b5d21fe582af12f4f98f6dbc2e3 GIT binary patch literal 77174 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

x9>-TnLl|>sr_SQcihX0XxYnE?K;L(Ai84rLfUU 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 Hjo<$lC2s`j literal 0 HcmV?d00001 diff --git a/docs/source/content/api-ref.rst b/docs/source/content/api-ref.rst index ecd1cdc..35b3bea 100644 --- a/docs/source/content/api-ref.rst +++ b/docs/source/content/api-ref.rst @@ -304,6 +304,23 @@ drawing模块主要存放与绘图相关的函数 若为 ``True`` 且同时传入 ``extent``,则自动设置坐标范围。 +.. py:function:: clip_imshow_by_map(image, map_polygon, ax=None, extent=None, set_extent=False) + :module: cnmaps.drawing + + 对 ``imshow`` 图像按地图边界裁剪,常用于山地阴影图(hillshade)或 RGB 栅格底图。 + + :param image: + ``ax.imshow()`` 的返回值。 + :param map_polygon: + 地图边界对象;支持单个 ``MapPolygon``、列表或 ``GeoDataFrame``。 + :param ax: + 坐标轴;默认优先使用 ``image.axes``,拿不到时再回退到当前轴。 + :param extent: + 可选的经纬度范围 ``[left, right, lower, upper]``。 + :param bool set_extent: + 若为 ``True`` 且同时传入 ``extent``,则自动设置坐标范围。 + + .. py:function:: clip_streamplot_by_map(streamplot, map_polygon, ax=None, extent=None, set_extent=False) :module: cnmaps.drawing diff --git a/docs/source/content/usage.rst b/docs/source/content/usage.rst index b5db7a2..e693e7c 100644 --- a/docs/source/content/usage.rst +++ b/docs/source/content/usage.rst @@ -487,6 +487,43 @@ cnmaps可以很方便地对地图进行合并,例如我们可以将北京、 .. image:: ../_static/clip-china-quiver.png +剪切山地阴影图(imshow / hillshade) + +.. code:: python + + import cartopy.crs as ccrs + import matplotlib.pyplot as plt + from matplotlib.colors import LightSource + from cnmaps import get_adm_maps, clip_imshow_by_map, draw_map + from cnmaps.sample import load_dem + + lons, lats, dem = load_dem() + hillshade = LightSource(azdeg=315, altdeg=45).shade( + dem, + cmap=plt.cm.Greys, + vert_exag=0.8, + blend_mode='overlay', + ) + + fig = plt.figure(figsize=(10, 10)) + ax = fig.add_subplot(111, projection=ccrs.PlateCarree()) + map_polygon = get_adm_maps(country='中国', record='first', only_polygon=True) + + image = ax.imshow( + hillshade, + extent=[lons.min(), lons.max(), lats.min(), lats.max()], + origin='lower', + transform=ccrs.PlateCarree(), + ) + + clip_imshow_by_map(image, map_polygon) + draw_map(map_polygon, color='k', linewidth=1) + ax.set_extent(map_polygon.get_extent()) + + plt.show() + +.. image:: ../_static/clip-china-hillshade.png + 剪切流线图(streamplot) .. code:: python diff --git a/tests/test_docs_examples.py b/tests/test_docs_examples.py index 41c344e..e4b6838 100644 --- a/tests/test_docs_examples.py +++ b/tests/test_docs_examples.py @@ -5,10 +5,12 @@ import cartopy.crs as ccrs import matplotlib.pyplot as plt import numpy as np +from matplotlib.colors import LightSource from cnmaps import ( clip_clabels_by_map, clip_contours_by_map, + clip_imshow_by_map, clip_pcolormesh_by_map, clip_quiver_by_map, clip_scatter_by_map, @@ -124,7 +126,7 @@ def test_docs_union_example(): def test_docs_clip_examples(): - """覆盖 usage.rst 中 contourf、pcolormesh、quiver、scatter、clabel 裁剪示例。""" + """覆盖 usage.rst 中 contourf、imshow、pcolormesh、quiver、scatter、clabel 裁剪示例。""" china = get_adm_maps(country="中国", record="first", only_polygon=True) @@ -146,6 +148,25 @@ def test_docs_clip_examples(): draw_map(china, ax=ax, color="k", linewidth=1) _savefig(fig, "usage", "clip-china-contourf.png") + fig = plt.figure(figsize=(10, 10)) + ax = fig.add_subplot(111, projection=ccrs.PlateCarree()) + hillshade = LightSource(azdeg=315, altdeg=45).shade( + dem, + cmap=plt.cm.Greys, + vert_exag=0.8, + blend_mode="overlay", + ) + image = ax.imshow( + hillshade, + extent=[lons_dem.min(), lons_dem.max(), lats_dem.min(), lats_dem.max()], + origin="lower", + transform=ccrs.PlateCarree(), + ) + clip_imshow_by_map(image, china, ax=ax) + draw_map(china, ax=ax, color="k", linewidth=1) + ax.set_extent(china.get_extent()) + _savefig(fig, "usage", "clip-china-hillshade.png") + fig = plt.figure(figsize=(10, 10)) ax = fig.add_subplot(111, projection=ccrs.PlateCarree()) mesh = ax.pcolormesh( diff --git a/tests/test_drawing.py b/tests/test_drawing.py index 4b154ed..074fd99 100644 --- a/tests/test_drawing.py +++ b/tests/test_drawing.py @@ -5,6 +5,7 @@ import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs +from matplotlib.colors import LightSource from matplotlib.patches import FancyArrowPatch from cnmaps import ( @@ -12,6 +13,7 @@ get_adm_names, clip_clabels_by_map, clip_contours_by_map, + clip_imshow_by_map, clip_streamplot_by_map, draw_map, draw_maps, @@ -183,6 +185,42 @@ def test_clip_pcolormesh(): plt.close() +def test_clip_imshow(): + """测试剪切 imshow / hillshade 图.""" + + lons, lats, dem = load_dem() + hillshade = LightSource(azdeg=315, altdeg=45).shade( + dem, + cmap=plt.cm.Greys, + vert_exag=0.8, + blend_mode="overlay", + ) + + for map_arg in map_args: + name = map_arg["name"] + + fig = plt.figure(figsize=(10, 10)) + ax = fig.add_subplot(111, projection=ccrs.PlateCarree()) + map_polygon = get_adm_maps(**map_arg) + + image = ax.imshow( + hillshade, + extent=[lons.min(), lons.max(), lats.min(), lats.max()], + origin="lower", + transform=ccrs.PlateCarree(), + ) + + clip_imshow_by_map(image, map_polygon) + assert image.get_clip_path() is not None + + draw_map(map_polygon, linewidth=1) + ax.set_extent(map_polygon.get_extent(buffer=1)) + savefp = os.path.join("./tmp", "test_clip_imshow", f"{name}.png") + os.makedirs(os.path.dirname(savefp), exist_ok=True) + plt.savefig(savefp, bbox_inches="tight") + plt.close() + + def test_clip_contour(): """测试剪切等值线."""