【问题标题】:Matplotlib (Jupyter ipython) : Plotting does not work in MacOS BackendMatplotlib (Jupyter ipython):绘图在 MacOS 后端不起作用
【发布时间】:2018-08-04 23:33:09
【问题描述】:

问题的背景:我基本上从 Macbook pro 2015 切换到 Macbook pro 2017(从 macOS Sierra 10.12.6High Sierra 10.13.2),我用时间机器从旧 macbook 复制了所有内容。

我最近换了电脑,matplotlib 出现大量错误 -.-
第一个问题是:如果我打开一个交互式图形然后关闭它(按十字键),那么 Jupyter 会挂起。我查看了解决方案,基本上建议是更新所有内容,所以我做到了。

我正在使用

Jupyter 4.4.0
conda 4.3.30
Python 2.7.14 |Anaconda custom (64-bit)| (default, Dec  7 2017, 11:07:58) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin

我以前的电脑,

conda 4.3.30
Jupyter 4.1.0
Python 2.7.11 | Annaconda custom(x86_64) [GCC 4.2.1 (Apple Inc. build 5577) on darwin

我之前有matplotlib 1.5.1,现在我升级到2.1.1,希望能解决这个问题。

在我以前的计算机(它仍然可以与 matplotlib 一起正常工作)中,我使用的是 MacOSX 后端(默认),它非常适合绘图。但是,我对此有很多问题。首先,绘图会导致jupyter 崩溃,现在所有更新至少不会崩溃,但现在,MacOSX 后端甚至不显示绘图
细胞只是运行,没有任何东西出来。

例子:

import matplotlib
%matplotlib
import matplotlib.pyplot as plt
print "backend : ", matplotlib.get_backend()
plt.plot(range(10))
plt.show()

输出:

Using matplotlib backend: MacOSX
backend :  MacOSX

而且根本没有情节!

如果我使用tkAgg 后端:

import matplotlib
matplotlib.use('tkAgg')
import matplotlib.pyplot as plt
print "backend : ", matplotlib.get_backend()
plt.plot(range(10))
plt.show()

backend :  TkAgg

它运行良好并在新窗口上绘制绘图,但现在关闭绘图并不会阻止单元格运行。我必须通过键盘停止它或按 jupyter 上的停止。

我在这里遗漏了什么吗?无论如何要在 matplotlib 中解决这个烦人的事情?

进一步:

import matplotlib
matplotlib.use('Qt4Agg')
import matplotlib.pyplot as plt

给,

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-8c09ccc60eaa> in <module>()
      1 import matplotlib
      2 matplotlib.use('Qt4Agg')
----> 3 import matplotlib.pyplot as plt
      4 print "backend : ", matplotlib.get_backend()
      5 plt.plot(range(10))

//anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py in <module>()
    114 ## Global ##
    115 
--> 116 _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
    117 
    118 _IP_REGISTERED = None

//anaconda/lib/python2.7/site-packages/matplotlib/backends/__init__.pyc in pylab_setup(name)
     58     # imports. 0 means only perform absolute imports.
     59     backend_mod = __import__(backend_name, globals(), locals(),
---> 60                              [backend_name], 0)
     61 
     62     # Things we pull in from all backends

//anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py in <module>()
      8 
      9 from .backend_agg import FigureCanvasAgg
---> 10 from .backend_qt4 import (
     11     QtCore, _BackendQT4, FigureCanvasQT, FigureManagerQT, NavigationToolbar2QT)
     12 from .backend_qt5agg import FigureCanvasQTAggBase

//anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py in <module>()
     16 from matplotlib.widgets import SubplotTool
     17 
---> 18 from .qt_compat import QtCore, QtWidgets, _getSaveFileName, __version__
     19 
     20 from .backend_qt5 import (

//anaconda/lib/python2.7/site-packages/matplotlib/backends/qt_compat.py in <module>()
    148     # have been changed in the above if block
    149     if QT_API in [QT_API_PYQT, QT_API_PYQTv2]:  # PyQt4 API
--> 150         from PyQt4 import QtCore, QtGui
    151 
    152         try:

ImportError: dlopen(/usr/local/lib/python2.7/site-packages/PyQt4/QtCore.so, 2): Library not loaded: /usr/local/lib/QtCore.framework/Versions/4/QtCore
  Referenced from: /usr/local/lib/python2.7/site-packages/PyQt4/QtCore.so
  Reason: image not found

【问题讨论】:

    标签: python macos matplotlib


    【解决方案1】:

    我的解决方法是将图像保存到文件,然后通过PIL打开它

    plt.plot(x,y)
    plt.save('fig.png')
    
    from PIL import Image
    img = Image.open('fig.png')
    img.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2015-10-15
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      相关资源
      最近更新 更多