Как я могу установить "бэкэнд" в matplotlib в Python?

89

Я новый пользователь matplotlib, моя платформа - Ubuntu 10.04 Python 2.6.5

Это мой код

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 
plt.plot([1,2,3])

Ошибка:

/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py:41: UserWarning: 
Your currently selected backend, 'agg' does not support show().
Please select a GUI backend in your matplotlibrc file ('/usr/local/lib/python2.6/dist-packages/matplotlib/mpl-data/matplotlibrc')
or with matplotlib.use()
  (backend, matplotlib.matplotlib_fname()))
  • Я установил библиотеку Anti-Grain Geometry, apt-get install libaggно она не работает.
  • Я попытался использовать другой аргумент бэкэнда, например GTK и TkAgg.
  • Я установил python-gtk2-devпакет, но ошибка все еще ниже.
  • Может ли кто-нибудь сказать мне исполняемый аргумент серверной части и его библиотеку зависимостей?

Вот ошибка:

>>> matplotlib.use('GTK')
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/pyplot.py", line 95, in <module>
    new_figure_manager, draw_if_interactive, show = pylab_setup()
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup
    globals(),locals(),[backend_name])
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gtk.py", line 28, in <module>
    from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK 
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gdk.py", line 29, in <module>
    from matplotlib.backends._backend_gdk import pixbuf_get_pixels_array
ImportError: No module named _backend_gdk
user504909
источник

Ответы:

89

В настоящий момент выбранный вами бэкэнд, "agg", не поддерживает show ().

AGGбэкэнд предназначен для записи в файл, а не для рендеринга в окне. См. FAQ по бэкэнду на веб-сайте matplotlib.

ImportError: нет модуля с именем _backend_gdk

Что касается второй ошибки, возможно, ваш дистрибутив matplotlib не скомпилирован с поддержкой GTK или вы пропустили пакет PyGTK. Попробуй установить.

Вы вызываете show()метод внутри терминала или приложения, имеющего доступ к графической среде?

Попробуйте другие серверные программы с графическим интерфейсом пользователя в следующем порядке:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg
Андреа Спадаччини
источник
спасибо большое, я сделал не тот персонал, это установил matplotlib перед получением PyGTK
user504909,
1
в качестве побочного комментария, я бы попробовал QTAgg последним, поскольку он нацелен на QT3 и, вероятно, будет устаревшим в среднесрочной перспективе.
tacaswell
29

К вашему сведению, я обнаружил, что мне нужно matplotlib.use('Agg')сначала указать порядок импорта Python. Для того, что я делал (модульное тестирование должно было быть безголовым), это означало,

import matplotlib
matplotlib.use('Agg')

вверху моего основного тестового сценария. Никаких других файлов трогать не пришлось.

Бен
источник
Я должен сделать то же самое, что меня очень беспокоит. Вы когда-нибудь находили другое решение для Elegrant?
QM.py
И я обнаружил, что важно, чтобы он был на самом верху (а не после некоторых других импортных товаров). +1.
Райан
Да, это должно быть первое, что вы делаете перед любым другим импортом matplotlib.
JakeCowton 07
19

Это также можно установить в файле конфигурации matplotlibrc(как описано в сообщении об ошибке), например:

# The default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo
# CocoaAgg MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG
backend : Agg

Таким образом, бэкэнд не нужно жестко программировать, если код используется совместно с другими людьми. Для получения дополнительной информации проверьте документацию .

BenC
источник
7

Опубликованные вами ошибки не связаны. Первый из-за того, что вы выбрали серверную часть, не предназначенную для интерактивного использования, т.е. агг. Вы все еще можете использовать (и должны использовать) их для создания графиков в сценариях, которые не требуют взаимодействия с пользователем.

Если вам нужна интерактивная лабораторная среда, как в Matlab / Pylab, вы, очевидно, импортируете бэкэнд, поддерживающий использование графического интерфейса, например Qt4Agg (требуется Qt и AGG), GTKAgg (GTK и AGG) или WXAgg (wxWidgets и Agg).

Я бы начал с попытки использовать WXAgg, кроме того, это действительно зависит от того, как вы установили Python и matplotlib (исходный код, пакет и т. Д.)

Джим Бриссом
источник
3

Перед запуском python вы можете сделать это в bash

export MPLBACKEND=TkAgg
Фридрих
источник
3

Вы также можете попробовать просмотреть график в браузере.

Используйте следующее:

matplotlib.use('WebAgg')
Седой
источник
2

Я ударил это при попытке скомпилировать python, numpy, scipy, matplotlib в моем собственном VIRTUAL_ENV

Перед установкой matplotlib необходимо собрать и установить: pygobject pycairo pygtk

А затем сделайте это с помощью matplotlib: перед сборкой matplotlib проверьте с помощью 'python ./setup.py build --help', включен ли бэкэнд 'gtkagg'. Затем соберите и установите

Перед экспортом PKG_CONFIG_PATH = $ VIRTUAL_ENV / lib / pkgconfig

кстати
источник
2

Для новичков,

matplotlib.pyplot.switch_backend(newbackend)
Али Эркан
источник