Python Can';";导入matplotlib.pyplot作为plt“;

Python Can';";导入matplotlib.pyplot作为plt“;,python,python-2.7,matplotlib,raspberry-pi,python-3.4,Python,Python 2.7,Matplotlib,Raspberry Pi,Python 3.4,无法获取要导入的matplotlib.pyplot。已将我的pi升级为Jessie,Python3.4,并从源代码处安装matplotlib。 以下是我从该网站获得的一些代码,经过修改以尝试调试: #!/usr/bin/python3.4 #find_backends.py #from pylab import * import time import matplotlib as mpl import matplotlib.backends #import matplotlib.pyplot

无法获取要导入的matplotlib.pyplot。已将我的pi升级为Jessie,Python3.4,并从源代码处安装matplotlib。 以下是我从该网站获得的一些代码,经过修改以尝试调试:

#!/usr/bin/python3.4
#find_backends.py
#from pylab import *
import time

import matplotlib as mpl
import matplotlib.backends
#import matplotlib.pyplot as p
import os.path


def is_backend_module(fname):
    """Identifies if a filename is a matplotlib backend module"""
    return fname.startswith('backend_') and fname.endswith('.py')

def backend_fname_formatter(fname): 
    """Removes the extension of the given filename, then takes away the leading 'backend_'."""
    return os.path.splitext(fname)[0][8:]

print("thebackend= " + mpl.get_backend())
# get the directory where the backends live
backends_dir = os.path.dirname(matplotlib.backends.__file__)
print("backends_dir: \t" + str(backends_dir))

# filter all files in that directory to identify all files which provide a backend
backend_fnames = filter(is_backend_module, os.listdir(backends_dir))

backends = [backend_fname_formatter(fname) for fname in backend_fnames]

print("supported backends: \t" + str(backends))

# validate backends
backends_valid = []
for b in backends:
    try:
        p.switch_backend(b)
        backends_valid += [b]
    except:
        continue

print("valid backends: \t" + str(backends_valid))


# try backends performance
for b in backends_valid:

    ion()
    try:
        p.switch_backend(b)


        clf()
        tstart = time.time()               # for profiling
        x = arange(0,2*pi,0.01)            # x-array
        line, = plot(x,sin(x))
        for i in arange(1,200):
            line.set_ydata(sin(x+i/10.0))  # update the data
            draw()                         # redraw the canvas

        print(b + ' FPS: \t' , 200/(time.time()-tstart))
        ioff()

    except:
        print(b + " error :(")
结果:

thebackend= GTK3Agg
backends_dir:   /usr/local/lib/python3.4/dist-packages/matplotlib/backends
supported backends:     ['agg', 'qt5', 'mixed', 'template', 'cairo', 'gtkcairo', 'gtk3', 'webagg_core', 'gtk3cairo', 'pdf', 'gdk', 'ps', 'wx', 'wxagg', 'qt5agg', 'macosx', 'qt4agg', 'qt4', 'nbagg', 'gtkagg', 'tkagg', 'pgf', 'webagg', 'svg', 'gtk3agg', 'gtk']
valid backends:     []


------------------
(program exited with code: 0)
Press return to continue
那么后端是GTK3AGG?为什么大写字母与支持的后端列表不匹配? 如果将#从#import matplotlib.pyplot as p中删除#,则导入将失败,我将获得:

** (find_backends.py:1057): WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_cairo.py", line 33, in <module>
    import cairocffi as cairo
ImportError: No module named 'cairocffi'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_cairo.py", line 36, in <module>
    import cairo
ImportError: No module named 'cairo'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "find_backends.py", line 8, in <module>
    import matplotlib.pyplot as p
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_gtk3agg.py", line 12, in <module>
    from .backend_cairo import cairo, HAS_CAIRO_CFFI
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_cairo.py", line 38, in <module>
    raise ImportError("Cairo backend requires that cairocffi or pycairo is installed.")
ImportError: Cairo backend requires that cairocffi or pycairo is installed.


------------------
(program exited with code: 1)
Press return to continue
**(find_backends.py:1057):警告**:检索辅助功能总线地址时出错:org.freedesktop.DBus.Error.ServiceUnknown:任何.service文件都未提供名称org.a11y.bus
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.4/dist packages/matplotlib/backends/backend_cairo.py”,第33行,在
将Cairocfi作为cairo导入
ImportError:没有名为“cairocffi”的模块
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.4/dist packages/matplotlib/backends/backend_cairo.py”,第36行,在
进口开罗
ImportError:没有名为“cairo”的模块
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“find_backends.py”,第8行,在
将matplotlib.pyplot导入为p
文件“/usr/local/lib/python3.4/dist packages/matplotlib/pyplot.py”,第115行,在
_后端模块、新图形管理器、绘图(如果交互式),显示=pylab\u设置()
pylab_设置中的文件“/usr/local/lib/python3.4/dist packages/matplotlib/backends/_init__uuuu.py”,第32行
全局变量(),局部变量(),[backend_name],0)
文件“/usr/local/lib/python3.4/dist packages/matplotlib/backends/backendgtk3agg.py”,第12行,在
from.backend\u cairo import cairo,HAS\u cairo\u CFFI
文件“/usr/local/lib/python3.4/dist packages/matplotlib/backends/backend_cairo.py”,第38行,在
raise ImportError(“Cairo后端要求安装cairocffi或pycairo。”)
ImportError:Cairo后端要求安装cairocffi或pycairo。
------------------
(程序已退出,代码为:1)
按return继续
cairo被列为受支持的后端,但在此失败。我不知道下一步该试什么。大约两年来,我一直在从《Python程序员的Raspberry Pi食谱》一书中不断尝试matplotlib示例。我几乎准备再次放弃。

答案是肯定的。如上所述,在matplotlib.pyplot导入之前必须使用use()。我必须尝试上面找到的几个后弯才能找到一个有效的

import numpy as np
import matplotlib as mpl
mpl.use('tkagg')    #YAAA!!  this finally makes the Damn thing work
import matplotlib.pyplot as plt

尝试安装
cairocfi
pycairo