Python matplotlib 开罗错误

Python matplotlib Cairo error

我使用的是比 pyplot tutorial 网站上的示例代码更简单的东西:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5])
plt.show()

但是当我运行它时,出现错误:

TypeError: Couldn't find foreign struct converter for 'cairo.Context'

我正在使用 Python 3.4.2,并从 pip 全新安装了 matplotlib,cairocfft>0.6,numpy>=1.6。

我尝试卸载 cairocfft 并从 Arch 存储库中获取 python-cairo,但现在出现错误:

NotImplementedError: Surface.create_for_data: Not Implemented yet.

有没有不用装很多库就可以画出基本折线图的方法?我对 installing pyqt4, as this blogpost recommends. This github issue suggests installing gi-cairo, but gi-cairo is not on the Arch repositories 不感兴趣,在 PyPI 上也找不到(我自己搜索失败?)

我记得这在 Python2 上很容易,但现在已经迁移到 Python3。

这似乎是一个真正的问题;进一步播放后,我发现了一条错误消息:

/usr/lib/python3.4/site-packages/matplotlib/backends/backend_gtk3agg.py:18:
UserWarning: The Gtk3Agg backend is known to not work on Python 3.x with pycairo.
Try installing cairocffi.
"The Gtk3Agg backend is known to not work on Python 3.x with pycairo."

但奇怪的是,我确实安装了 cairocffi。我找到的最佳解决方案是使用不同的后端,正如 tcaswell 在评论中所建议的那样。我发现导出为 pdf 非常适合以下行:plt.savefig("Graph.pdf").

skytux 提到将后端更改为 Tk 是可行的。 展示了如何执行此操作。

2016 年 3 月更新:plotly 是我现在使用的 matplotlib 的绝佳替代品。它与浏览器一起生成文档,我没有遇到平台问题。

这是为了防止有人在 Ubuntu 14.04 上遇到与我使用 Python 3.4.3 时相同的问题。通过使用 JDong 的回答中的位和提示,我已经解决了如下问题。 (基本上将 MatPlotLib 后端更改为 qt5agg。)

  1. 安装python3-pyqt5 sudo apt-get install python3-pyqt5

  2. 找出 matplotlibrc 文件的位置,以便您可以对其进行编辑。这可以在 Python 控制台中使用以下命令来完成。 import matplotlib matplotlib.matplotlib_fname()

  3. 编辑 matplotlibrc 文件(您可能需要 sudo),找到以 backend : 开头的行,并将其更改为 backend : qt5agg.如果这样的行不存在,就创建一个。

以上步骤已经在 Ubuntu 14.04 上为我解决了。希望对您有所帮助。

在 Python 2.7 的情况下,可以通过安装软件包 python-pyqt5 并像这样使用 pyplot 来解决:

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

如果您有 sudo 权限,您还可以将 Qt5Agg 设置为默认后端,请参阅 Matplotlib Backend 了解设置后端的其他方法。

安装 Matplotlib 时警告我安装 cairocffi,因为我的系统不兼容。遇到NotImplementedError(图未画)后,安装Debian的python3-cairocffi包解决了问题。

使用 sudo apt-get install python-gi-cairo 安装 python-gi-cairo 解决了我的问题