python 3中的Cartopy错误:“AttributeError:'_Shape'对象没有属性'get'

问题描述

我在 Linux 上运行 Python 3.9 以及 cartopy 0.18.0 和 matplotlib 3.4.2。我刚刚开始在使用 cartopy 制作地图时遇到错误。当我显示图形 (plt.show()) 或保存图形 (plt.savefig()) 时,会发生以下情况:

import os,sys,cartopy,warnings
import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cartopy.util import add_cyclic_point

# Load data,perform calculations...
# .....
# .....
# .....


# Make map of results
cmin = -0.5; cmax = 0.51; cint = 0.05
clevs = np.round(np.arange(cmin,cmax,cint),2)
nlevs = len(clevs) - 1

cmap = plt.get_cmap(name='RdBu_r',lut=nlevs)

states_provinces = cartopy.feature.NaturalEarthFeature(
                   category='cultural',name='admin_1_states_provinces_lines',scale='50m',facecolor='none')

projection = ccrs.Miller(central_longitude=-180.)
data_crs = ccrs.PlateCarree()
extent = [-270,-30,20,80] # Set the map extents

plot_data,plot_lon = add_cyclic_point(data,coord=lon,axis=0)
lat,lon = np.meshgrid(lat,plot_lon)

plt.figure()
ax = plt.subplot(111,projection=projection)
ax.set_extent(extent,crs=data_crs)
ax.add_feature(cartopy.feature.BORDERS,edgecolor='gray',linewidth=1)
ax.add_feature(states_provinces,linewidth=1)
    ax.add_feature(cartopy.feature.LAKES,facecolor='white',linewidth=1)
ax.coastlines(resolution='50m',color='black',linewidth=1)
cs=ax.contourf(lon,lat,plot_data,clevs,cmap=cmap,transform=data_crs)
    
cbar=plt.colorbar(cs,orientation='horizontal')

cticks = []
for i in clevs:
    cticks.append(int(i)) if i.is_integer() else cticks.append(i)

cbar.set_ticks(clevs[::2])
cbar.set_ticklabels(cticks[::2])

for i in cbar.ax.yaxis.get_ticklabels():
    i.set_size(14)

plt.title('Test Plot',size=16)
    
# plt.show(block=False)
plt.savefig('Test.png',dpi=400)

我收到以下错误

  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/pyplot.py",line 966,in savefig
    res = fig.savefig(*args,**kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/figure.py",line 3005,in savefig
    self.canvas.print_figure(fname,**kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/backend_bases.py",line 2255,in print_figure
    result = print_method(
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/backend_bases.py",line 1669,in wrapper
    return func(*args,**kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/backends/backend_agg.py",line 508,in print_png
    figureCanvasAgg.draw(self)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/backends/backend_agg.py",line 406,in draw
    self.figure.draw(self.renderer)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/artist.py",line 74,in draw_wrapper
    result = draw(artist,renderer,*args,**kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/artist.py",line 51,in draw_wrapper
    return draw(artist,line 2780,in draw
    mimage._draw_list_compositing_images(
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/image.py",line 132,in _draw_list_compositing_images
    a.draw(renderer)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/artist.py",**kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py",line 480,in draw
    return matplotlib.axes.Axes.draw(self,renderer=renderer,**kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/_api/deprecation.py",line 431,in wrapper
    return func(*inner_args,**inner_kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/axes/_base.py",line 2921,in draw
    mimage._draw_list_compositing_images(renderer,self,artists)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/matplotlib/image.py",**kwargs)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/cartopy/mpl/feature_artist.py",line 155,in draw
    geoms = self._feature.intersecting_geometries(extent)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/cartopy/feature/__init__.py",line 302,in intersecting_geometries
    return super(NaturalEarthFeature,self).intersecting_geometries(extent)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/cartopy/feature/__init__.py",line 110,in intersecting_geometries
    return (geom for geom in self.geometries() if
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/cartopy/feature/__init__.py",line 287,in geometries
    geometries = tuple(shapereader.Reader(path).geometries())
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/cartopy/io/shapereader.py",line 169,in geometries
    yield sgeom.shape(shape)
  File "/share/apps/anaconda2/envs/py39/lib/python3.9/site-packages/shapely/geometry/geo.py",line 97,in shape
    geom_type = ob.get("type").lower()
AttributeError: '_Shape' object has no attribute 'get'

如果我在上面的代码中注释掉地图特征(例如,ax.add_feature()),绘图是用阴影轮廓绘制的(当然没有地图图像)。

我尝试重新创建conda环境,卸载并重新安装cartopy,仍然出现错误。对此有何想法?谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...