【python-wrf】绘制wrf中的土地利用报错内容及其解决方法

2023-12-13 23:58:50

?从该代码处绘制wrf中的土地利用报错内容及其解决方法

1.报错内容:

微信公众平台 (qq.com)icon-default.png?t=N7T8https://mp.weixin.qq.com/s/Cn0vhvfroVADPnT237LXNw

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[9], line 7
      4     start(file_in,shp_path)
      6 if __name__ == "__main__":
----> 7     main()

Cell In[9], line 4, in main()
      2 file_in = "F:/pythonplot/geo_em.d01.nc"
      3 shp_path = "F:/毕业数据处理/中国shp/3省市县行政区划界线/chinaProvince.shp"
----> 4 start(file_in,shp_path)

Cell In[5], line 43, in start(file_in, shp_path)
     41 ax.xaxis.set_major_formatter(LONGITUDE_FORMATTER)
     42 ax.yaxis.set_major_formatter(LATITUDE_FORMATTER)
---> 43 lambert_xticks(ax, xticks)
     44 lambert_yticks(ax, yticks)
     46 # 叠加shp

Cell In[8], line 19, in lambert_xticks(ax, ticks)
     17 te = lambda xy: xy[0]
     18 lc = lambda t, n, b: np.vstack((np.zeros(n) + t, np.linspace(b[2], b[3], n))).T
---> 19 xticks, xticklabels = _lambert_ticks(ax, ticks, 'bottom', lc, te)
     20 ax.xaxis.tick_bottom()
     21 ax.set_xticks(xticks)

Cell In[8], line 35, in _lambert_ticks(ax, ticks, tick_location, line_constructor, tick_extractor)
     33 def _lambert_ticks(ax, ticks, tick_location, line_constructor, tick_extractor):
     34     """Get the tick locations and labels for an axis of a Lambert Conformal projection."""
---> 35     outline_patch = sgeom.LineString(ax.outline_patchs.get_path().vertices.tolist())
     36     axis = find_side(outline_patch, tick_location)
     37     n_steps = 30

AttributeError: 'GeoAxes' object has no attribute 'outline_patch'

2.解决方法:?

源代码:

def _lambert_ticks(ax, ticks, tick_location, line_constructor, tick_extractor):
? ? """Get the tick locations and labels for an axis of a Lambert Conformal projection."""
? ? outline_patch = sgeom.LineString(ax.outline_patch.get_path().vertices.tolist())
? ? axis = find_side(outline_patch, tick_location)
? ? n_steps = 30
? ? extent = ax.get_extent(ccrs.PlateCarree())
? ? _ticks = []
? ? for t in ticks:
? ? ? ? xy = line_constructor(t, n_steps, extent)
? ? ? ? proj_xyz = ax.projection.transform_points(ccrs.Geodetic(), xy[:, 0], xy[:, 1])
? ? ? ? xyt = proj_xyz[..., :2]
? ? ? ? ls = sgeom.LineString(xyt.tolist())
? ? ? ? locs = axis.intersection(ls)
? ? ? ? if not locs:
? ? ? ? ? ? tick = [None]
? ? ? ? else:
? ? ? ? ? ? tick = tick_extractor(locs.xy)
? ? ? ? _ticks.append(tick[0])
? ? # Remove ticks that aren't visible:
? ? ticklabels = copy(ticks)
? ? while True:
? ? ? ? try:
? ? ? ? ? ? index = _ticks.index(None)
? ? ? ? except ValueError:
? ? ? ? ? ? break
? ? ? ? _ticks.pop(index)
? ? ? ? ticklabels.pop(index)
? ? return _ticks, ticklabels

改变代码

def _lambert_ticks(ax, ticks, tick_location, line_constructor, tick_extractor):
? ? """Get the tick locations and labels for an axis of a Lambert Conformal projection."""
? ? outline_patch = sgeom.LineString(ax.patch.get_path().vertices.tolist())
? ? axis = find_side(outline_patch, tick_location)
? ? n_steps = 30
? ? extent = ax.get_extent(ccrs.PlateCarree())
? ? _ticks = []
? ? for t in ticks:
? ? ? ? xy = line_constructor(t, n_steps, extent)
? ? ? ? proj_xyz = ax.projection.transform_points(ccrs.Geodetic(), xy[:, 0], xy[:, 1])
? ? ? ? xyt = proj_xyz[..., :2]
? ? ? ? ls = sgeom.LineString(xyt.tolist())
? ? ? ? locs = axis.intersection(ls)
? ? ? ? if not locs:
? ? ? ? ? ? tick = [None]
? ? ? ? else:
? ? ? ? ? ? tick = tick_extractor(locs.xy)
? ? ? ? _ticks.append(tick[0])
? ? # Remove ticks that aren't visible:
? ? ticklabels = copy(ticks)
? ? while True:
? ? ? ? try:
? ? ? ? ? ? index = _ticks.index(None)
? ? ? ? except ValueError:
? ? ? ? ? ? break
? ? ? ? _ticks.pop(index)
? ? ? ? ticklabels.pop(index)
? ? return _ticks, ticklabels

文章来源:https://blog.csdn.net/A18040554844/article/details/134983969
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。