You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cartopy基础示例运行失败,报ValueError错误求助

问题描述

已通过conda和pip3安装Cartopy及其依赖库,运行官网基础示例代码:

ax = plt.axes(projection=ccrs.PlateCarree())
ax.coastlines()

plt.savefig('coastlines.pdf')
plt.savefig('coastlines.png')

plt.show()

触发ValueError: zero-size array to reduction operation minimum which has no identity,错误栈如下:

Traceback (most recent call last):
  File "/Users/mattbright/Desktop/SCripts/lattice_geo.py", line 6, in <module>
    ax = plt.axes(projection=ccrs.Mollweide())
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/matplotlib/pyplot.py", line 947, in axes
    return subplot(111, **kwargs)
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/matplotlib/pyplot.py", line 1125, in subplot
    ax = fig.add_subplot(*args, **kwargs)
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/matplotlib/figure.py", line 1402, in add_subplot
    ax = subplot_class_factory(projection_class)(self, *args, **kwargs)
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/matplotlib/axes/_subplots.py", line 42, in __init__
    self._axes_class.__init__(self, fig, self.figbox, **kwargs)
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/cartopy/mpl/geoaxes.py", line 355, in __init__
    super(GeoAxes, self).__init__(*args, **kwargs)
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py", line 511, in __init__
    self.cla()
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/cartopy/mpl/geoaxes.py", line 528, in cla
    self._boundary()
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/cartopy/mpl/geoaxes.py", line 1425, in _boundary
    trans_path = proj_to_data.transform_path(path)
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/matplotlib/transforms.py", line 1527, in transform_path
    return self.transform_path_affine(self.transform_path_non_affine(path))
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/cartopy/mpl/geoaxes.py", line 181, in transform_path_non_affine
    src_path.vertices, self.source_projection)
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/cartopy/crs.py", line 649, in quick_vertices_transform
    if (x.min() >= x_limits[0] and x.max() <= x_limits[1] and
  File "/Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/numpy/core/_methods.py", line 43, in _amin
    return umr_minimum(a, axis, None, out, keepdims, initial, where)
ValueError: zero-size array to reduction operation minimum which has no identity

已尝试重装Anaconda、回退Matplotlib至3.3.0,均无效,求其他解决方法。


解决方案

1. 修复Cartopy自然特征数据缺失/损坏问题

该错误大概率是Cartopy依赖的自然地球数据(如海岸线)未正确下载或文件损坏导致的:

  • 手动下载基础数据集:获取官方提供的ne_10m_coastline等基础数据,解压到Cartopy的数据目录,默认路径为:
    /Users/mattbright/opt/miniconda3/lib/python3.7/site-packages/cartopy/data/raster/natural_earth
    
  • 自定义数据路径:若不想修改默认目录,可设置环境变量CARTOPY_DATA_DIR指向你的数据存储文件夹。
  • 清理旧数据:删除原有损坏的数据文件后重新下载,确保文件完整性。

2. 统一依赖安装方式并指定兼容版本

混合使用conda和pip安装易引发依赖冲突,且版本不匹配也会导致此类错误:

  • 完全用conda安装兼容版本组合:
    # 先卸载pip安装的Cartopy
    pip uninstall -y cartopy
    # 安装兼容版本的Cartopy、Matplotlib和NumPy
    conda install cartopy=0.18 matplotlib=3.3 numpy=1.19 --force-reinstall
    
    (0.18版本的Cartopy对Python3.7、Matplotlib3.3和NumPy1.19的兼容性经过验证)

3. 显式设置坐标轴范围

自动范围计算可能出现空数组问题,手动设置范围可规避:
修改示例代码,添加坐标轴范围设置:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# PlateCarree投影示例
ax = plt.axes(projection=ccrs.PlateCarree())
# 显式设置经纬度范围
ax.set_extent([-180, 180, -90, 90], crs=ccrs.PlateCarree())
ax.coastlines()

plt.savefig('coastlines.pdf')
plt.savefig('coastlines.png')
plt.show()

若使用Mollweide投影,同样添加上述set_extent语句即可。

4. 调试并修复NumPy数组异常

错误栈指向NumPy的最小值计算,可添加调试代码确认数组状态:
在代码中插入调试语句,检查投影转换时的顶点数组:

import numpy as np
# 在创建坐标轴后添加
print("Axes boundary vertices:", ax.get_extent())
# 或者查看Cartopy内部的路径顶点
path = ax._get_boundary_path()
print("Path vertices shape:", path.vertices.shape)

若输出显示顶点数组为空,可尝试降级NumPy到1.19.x版本,避免新版本的计算逻辑冲突。


内容的提问来源于stack exchange,提问作者Matt Bright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:41:57