matplotlib 和 cartopy 的 tight_layout 问题
Issue with tight_layout with matplotlib and cartopy
我最近切换到 Matplotlib 3.3.1,我的旧脚本开始报错。我想这是cartopy的问题。这是一个最小的可重现示例
import cartopy.crs as ccrs
fig, ax = plt.subplots(2, 2,
subplot_kw=dict(projection=ccrs.PlateCarree()),
figsize=[12,7], sharex=True, sharey=True)
plt.tight_layout()
有什么解决这个问题的建议吗?
这里我复制错误信息:
Traceback (most recent call last):
File "", line 4, in
plt.tight_layout()
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py",
line 451, in wrapper
return func(*args, **kwargs)
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\pyplot.py",
line 1490, in tight_layout
gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py",
line 411, in wrapper
return func(*inner_args, **inner_kwargs)
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\figure.py",
line 2613, in tight_layout
kwargs = get_tight_layout_figure(
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\tight_layout.py",
line 303, in get_tight_layout_figure
kwargs = auto_adjust_subplotpars(fig, renderer,
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\tight_layout.py",
line 84, in auto_adjust_subplotpars
bb += [ax.get_tightbbox(renderer, for_layout_only=True)]
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\axes_base.py",
line 4203, in get_tightbbox
bbox = a.get_tightbbox(renderer)
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\artist.py",
line 278, in get_tightbbox
bbox = self.get_window_extent(renderer)
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\patches.py",
line 598, in get_window_extent
return self.get_path().get_extents(self.get_transform())
File
"C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\path.py", line
603, in get_extents
return Bbox([xys.min(axis=0), xys.max(axis=0)])
File
"C:\Users\Vinod\anaconda3\lib\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
这是一个已知问题,已在 https://github.com/SciTools/cartopy/issues/1207 中得到解决。 (确保您拥有最新版本的 cartopy 可能会解决此问题)。
与此同时,作为一种解决方法,我们注意到您可以在调用 plt.tight_layout()
之前调用 fig.canvas.draw()
。
我最近切换到 Matplotlib 3.3.1,我的旧脚本开始报错。我想这是cartopy的问题。这是一个最小的可重现示例
import cartopy.crs as ccrs
fig, ax = plt.subplots(2, 2,
subplot_kw=dict(projection=ccrs.PlateCarree()),
figsize=[12,7], sharex=True, sharey=True)
plt.tight_layout()
有什么解决这个问题的建议吗?
这里我复制错误信息:
Traceback (most recent call last):
File "", line 4, in plt.tight_layout()
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py", line 451, in wrapper return func(*args, **kwargs)
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 1490, in tight_layout gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py", line 411, in wrapper return func(*inner_args, **inner_kwargs)
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\figure.py", line 2613, in tight_layout kwargs = get_tight_layout_figure(
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\tight_layout.py", line 303, in get_tight_layout_figure kwargs = auto_adjust_subplotpars(fig, renderer,
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\tight_layout.py", line 84, in auto_adjust_subplotpars bb += [ax.get_tightbbox(renderer, for_layout_only=True)]
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\axes_base.py", line 4203, in get_tightbbox bbox = a.get_tightbbox(renderer)
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\artist.py", line 278, in get_tightbbox bbox = self.get_window_extent(renderer)
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\patches.py", line 598, in get_window_extent return self.get_path().get_extents(self.get_transform())
File "C:\Users\Vinod\anaconda3\lib\site-packages\matplotlib\path.py", line 603, in get_extents return Bbox([xys.min(axis=0), xys.max(axis=0)])
File "C:\Users\Vinod\anaconda3\lib\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
这是一个已知问题,已在 https://github.com/SciTools/cartopy/issues/1207 中得到解决。 (确保您拥有最新版本的 cartopy 可能会解决此问题)。
与此同时,作为一种解决方法,我们注意到您可以在调用 plt.tight_layout()
之前调用 fig.canvas.draw()
。