【问题标题】:matplotlib crashes in plt.show() on macOS with TkAgg backendmatplotlib 在带有 TkAgg 后端的 macOS 上的 plt.show() 中崩溃
【发布时间】:2020-01-16 11:37:06
【问题描述】:

脚本在 for 循环中运行,每次迭代调用 plt.plot() 并在循环后调用 plt.show() - 并崩溃(屏幕冻结并需要强制重启)。崩溃之前或之后不会出现错误消息。 IMO,这不是内存问题。

如果我从 shell/PyCharm IDE 运行脚本也是如此。

有趣的点

  1. 过去我曾在同一台 Mac 和相同配置上多次运行此脚本。 唯一可能相关的是我几天前更新了我的操作系统。
  2. 当我在调试模式下运行脚本时,停止点位于“plt.show()”中 - 并且没有崩溃,并且脚本在不显示绘图的情况下结束。
  3. 运行脚本时,会打开一个带有“python”-ish 图标的小窗口。当我按下它时,没有任何反应。

我尝试关注许多其他报告的问题hereherehere - 均未成功。

MacOS 版本:Mojave 10.14.6

我无法共享代码和数据,但为了轻松重现问题 - 尝试运行以下简单代码:

>>> import matplotlib
>>> matplotlib.use("TkAgg")
>>> from matplotlib import pyplot as plt
>>> plt.plot(range(10))
[<matplotlib.lines.Line2D object at 0x1141069e8>]
>>> plt.show()

Mac 崩溃(冻结并需要重新启动)。

包:

matplotlib 3.0.3 py37h54f8f79_0
numpy 1.16.2 py37hacdab7b_0
numpy-base 1.16.2 py37h6575580_0
pyqt 5.9.2 py37h655552a_2
pyqt5 5.13.0 pypi_0 pypi scikit-learn 0.20.3 py37h27c97d8_0
scipy 1.2.1 py37h1410ff5_0

*conda info*

     active environment : base
    active env location : /Users/nancy/anaconda3
            shell level : 1
       user config file : /Users/nancy/.condarc
 populated config files : /Users/nancy/.condarc
          **conda version : 4.7.11**
    conda-build version : 3.17.8
         **python version : 3.7.3.final.0**
       virtual packages : 
       base environment : /Users/nancy/anaconda3  (writable)
           channel URLs : http://statgen.org/wp-content/uploads/Softwares/pyplink/osx-64
                          http://statgen.org/wp-content/uploads/Softwares/pyplink/noarch
                          https://repo.anaconda.com/pkgs/main/osx-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/osx-64
                          https://repo.anaconda.com/pkgs/r/noarch
          package cache : /Users/nancy/anaconda3/pkgs
                          /Users/nancy/.conda/pkgs
       envs directories : /Users/nancy/anaconda3/envs
                          /Users/nancy/.conda/envs
               **platform : osx-64**
             **user-agent : conda/4.7.11 requests/2.21.0 CPython/3.7.3 Darwin/18.7.0 OSX/10.14.6**
                UID:GID : 501:20
             netrc file : None
           offline mode : False

【问题讨论】:

  • 注意:如果我在没有 plt.show() 调用的情况下运行相同的崩溃代码,而是在运行期间将图像保存到文件中 - 计算机不会崩溃。所以问题在 show() 中是 100%
  • 问题是苹果不喜欢 Tkinter。 #774314999 的结论是,唯一的选择是不使用 TkAgg 后端。 Qt5Agg 应该可以正常工作。

标签: python macos matplotlib anaconda


【解决方案1】:

根据ImportanceOfBeingErnest 的评论,Apple 不喜欢 Tkinter(TkAgg 后端),所以我需要将后端更改为 'Qt5Agg'

import matplotlib  
matplotlib.use('Qt5Agg')
from matplotlib import pyplot as plt

【讨论】:

  • 我在更新到 Mojave 10.14.6 后遇到了完全相同的问题,现在解决了,非常感谢!
  • 谢谢!这是我在 macOS Catalina 上唯一有效的解决方案!
  • 我试图保存太多像素。不知何故,figsize 被炸毁了,我需要重新设置它。
猜你喜欢
  • 2020-02-25
  • 2017-05-13
  • 1970-01-01
  • 2017-11-09
  • 2018-01-15
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多