Matplotlib не отображает графики (проблемы совместимости с EPD)

Недавно я установил EPD 7.3-2 (бесплатную версию) на свой Ubuntu 12.04 (64-разрядная версия). У меня есть некоторые проблемы при попытке использовать ipython, я получил следующую ошибку:

ImportError: Gtk* backend требует установки pygtk.

Итак, я нашел эту статью:

https://support.enthought.com/entries/22961778-epd-for-mac-os-x-32-and-64-bit-versions

и даже подумал, что это для Mac OSX, но он работал на моей машине с Linux. Модификации, которые я сделал, заключались в том, чтобы поставить бэкэнд следующим образом:

backend      : Qt4Agg #GTKAgg
backend.qt4 : PySide

Так что раньше это был GTKAgg. Но теперь у меня новая проблема. Когда я пытаюсь построить с помощью pylab простой сюжет, например:

from pylab import *
plot([1,2,3])
show()

Ничего не появляется... И я получаю следующую ошибку:

Ошибка в atexit._run_exitfuncs: Traceback (последний последний вызов):
File "/home/mela/Librairies/epd_free-7.3-2-rh5-x86_64/lib/python2.7/atexit.py", строка 24, в файле _run_exitfuncs func(*targs, **kargs) "/home/mela/Librairies/epd_free-7.3-2-rh5-x86_64/lib/python2.7/site-packages/matplotlib/_pylab_helpers.py", строка 82, в файле destroy_all manager.destroy() "/home/mela/Librairies/epd_free-7.3-2-rh5-x86_64/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", строка 367, в уничтожении self._widgetclosed )

RuntimeError: внутренний объект C++ (PySide.QtGui.QMainWindow) уже удален.

Ошибка в sys.exitfunc: Traceback (последний последний вызов): файл "/home/mela/Librairies/epd_free-7.3-2-rh5-x86_64/lib/python2.7/atexit.py", строка 24, в _run_exitfuncs func (*targs, **kargs)
Файл "/home/mela/Librairies/epd_free-7.3-2-rh5-x86_64/lib/python2.7/site-packages/matplotlib/_pylab_helpers.py", строка 82, в файле destroy_all manager.destroy()
"/home/mela/Librairies/epd_free-7.3-2-rh5-x86_64/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", строка 367. , в уничтожении себя._widgetclosed )

RuntimeError: внутренний объект C++ (PySide.QtGui.QMainWindow) уже удален.

И я действительно не понимаю, что это значит и что мне делать. Любая подсказка будет оценена.


person lasofivec    schedule 12.04.2013    source источник


Ответы (1)


Итак, я нашел свою проблему. Прежде всего, из проблемы я понимаю, что он пытается закрыть окно, которое уже закрыто, поэтому я искал почему, и похоже, что теперь дисплеи pyplot должны закрываться сразу после этого, когда я добавляю pl.show(block=True ). Теперь у меня есть дисплей, но также ошибка сегментации.

Попробовав разные бэкенды, похоже, что TkAgg решает обе проблемы. Так что проблем с совместимостью нет, и я вижу свои графики.

PS: для изменения бэкэнда из matplotlib перейдите в ~/.matplotlib и отредактируйте файл matplotlibrc

person lasofivec    schedule 12.04.2013