matplotlib - 不能在 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 一起使用。
解决方案
我的配置完全相同,并且能够重现您的错误。但是在寻找类似的回溯之后,我终于找到了这篇文章,将 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()
在我的机器上有效地工作产生了期望的结果。
推荐阅读
- sqlite - 关闭时清理 sqlite db 文件
- symfony - FOSCKEditorBundle 仅在英语中不起作用,在私人模式下不起作用,专注于文本不起作用
- unit-testing - Symfony 4.1:如何在 UnitTest 中使用依赖注入(Swift_Mailer)
- javascript - V8 WasmModuleBuilder 从函数返回多个值
- c - 从 C 向 Python 发送 XDR 序列化数据的问题
- javascript - 通过节点的 index.js 以编程方式调用黄瓜 cli
- java - 为 JDBC 连接启用 TLS (1.2)
- spring - Eureka 服务发现在 Azure 中不起作用
- xml - X.509 证书的手动验证,与 XML 中的文档捆绑在一起
- java - 如何使用arraylist访问整数数组