2015-01-02 3 views
19

Я использую что-то проще, чем образец кода на pyplot tutorial сайте:Python Matplotlib Cairo ошибка

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

но когда я запускаю его, я получаю сообщение об ошибке:

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

I 'm на Python 3.4.2, и у вас есть новая установка matplotlib, cairocfft> 0.6, numpy> = 1.6 от pip.

Я попытался удалить cairocfft и захват из хранилищ Arch, но теперь у меня есть ошибки:

NotImplementedError: Surface.create_for_data: Not Implemented yet.

Есть ли способ, чтобы сделать основной линейный график без установки многих библиотек? Я не в восторге от installing pyqt4, так как this blogpost рекомендует. This github issue предлагает установки Г-Каир, но Г-каир не на Arch repositories, я не мог найти его на PyPI (мой собственный поиск не получится?)

Я помню это время ветер на python2, но мигрировал в Python3 прямо сейчас ,

+0

отлично работает для меня на арке. У меня есть python 3.4.2 и python-cairo 1.10.0-4. – matsjoyce

+0

У вас установлен 'python-gobject'? – nwk

+0

@nwk yes, 'python-gobject' установлен. – JDong

ответ

29

Это на тот случай, если у кого-то такая же проблема на 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. Надеюсь, это поможет.

+0

Подтверждено работать в Ubuntu 14.04 с Python 3.4 - FWIW Файл выглядит как установленный в '/ usr/local/lib/python3.4/dist-packages/matplotlib/mpl-data/matplotlibrc', и это должно быть одинаковым для всех (хотя метод, предложенный @Ray, работает отлично). – Marco

6

Это действительно настоящий вопрос; при дальнейшем игры я нашел сообщение об ошибке:

/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 работает. https://stackoverflow.com/a/21791045/2534876 показывает, как это сделать.

Обновление март 2016: plotly - отличная альтернатива matplotlib, которую я использую сейчас. Он работает с браузером для создания документов, и у меня не было проблем с платформой.

2

В случае с Python 2.7 может быть решена путем установки пакета python-pyqt5 и используя pyplot так:

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

Если у вас есть Судо Acces вы также можете установить Qt5Agg в качестве внутреннего интерфейса по умолчанию, см Matplotlib Backend другие способы, чтобы установить свой бэкенд.

3

После установки Matplotlib предупредил меня установить cairocffi из-за несовместимости в моей системе. После прослушивания NotImplementedError (графики не были нарисованы) установка пакета Debian python3-cairocffi решила проблему.

+0

Это должно быть проголосовано. Гораздо лучшее решение, чем изменение бэкэнда на Qt. –

2

Установка python-gi-cairo с помощью sudo apt-get install python-gi-cairo решена моя проблема

+0

В моем случае (Debian 9.2) принятый ответ не помог, но этот сделал! – phinz

Смежные вопросы