首页 > 解决方案 > 不能在 matplotlib 中出现错误的情况下使用紧密布局

问题描述

在下面的代码中,如果我取消注释调用 to 的行tightlayout,我会在 matplotlib 中崩溃。对于任何建议,我将不胜感激。为什么会这样。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig= plt.figure(figsize=(12, 7))
ax= fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.stock_img()
# plt.tight_layout()
plt.show()

这是回溯:

回溯(最后一次调用):文件“test.py”,第 6 行,在 plt.tight_layout() 文件“C:\ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\cbook\deprecation.py ",第 451 行,在包装器中返回 func(*args, **kwargs) 文件 "C:\ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\pyplot.py",第 1490 行,在tight_layout gcf( ).tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect) 文件“C:\ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\cbook\deprecation.py”,第 411 行, 在 wrapper return func(*inner_args, **inner_kwargs) File "C:\ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\figure.py",第 2613 行,tight_layout kwargs = get_tight_layout_figure( File " C:\ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\tight_layout.py",第 303 行,在 get_tight_layout_figure kwargs = auto_adjust_subplotpars(fig, renderer, File "C:\ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\tight_layout.py",第 84 行,在 auto_adjust_subplotpars bb += [ax.get_tightbbox(renderer , for_layout_only=True)] 文件“C:\ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\axes_base.py”,第 4203 行,在 get_tightbbox bbox = a.get_tightbbox(renderer) 文件“C:\ ProgramData\Anaconda3\envs\py38\lib\site-packages\matplotlib\artist.py”,第 286 行,在 get_tightbbox bbox = Bbox.intersection(bbox, clip_path.get_extents()) 文件“C:\ProgramData\Anaconda3\envs \py38\lib\site-packages\matplotlib\path.py",第 603 行,在 get_extents 中返回 Bbox([xys.min(axis=0), xys.max(axis=0)]) 文件“C:\ProgramData \Anaconda3\envs\py38\lib\site-packages\numpy\core_methods.py",第 43 行,在 _amin 返回 umr_minimum(a, axis, None, out, keepdims, initial, where) ValueError: 零大小数组到归约操作最小值,没有标识

我将 Python 3.8.5 与 matplotlib 3.3.1 和 CartoPy 0.18.0 一起使用。

标签: matplotlibcartopy

解决方案


我的配置完全相同,并且能够重现您的错误。但是在寻找类似的回溯之后,我终于找到了这篇文章,将 Matplotlib 从 3.3.1 升级到 3.3.2 解决了这个问题。

因此,如果您首先在终端中运行(使用 pip 或 conda)

conda upgrade matplotlib

或者

pip install matplotlib==3.3.2

然后,确保 Matplotlib 已更新到 3.3.2 并运行您的脚本:

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

fig= plt.figure(figsize=(12, 7))
ax= fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.stock_img()
plt.tight_layout()
plt.show()

tight_layout()在我的机器上有效地工作产生了期望的结果。


推荐阅读