matplotlib не показывает мои рисунки, хотя я вызываю pyplot.show ()


175

Требуется помощь по matplotlib. Да, я не забыл вызвать pyplot.show ().

$ ipython --pylab

import matplotlib.pyplot as p 
p.plot(range(20), range(20))

Возвращается matplotlib.lines.Line2D at 0xade2b2cкак выход.

p.show()

Там ничего не случится. Нет сообщения об ошибке. Нет нового окна. Ничего. Я устанавливаю matplotlibс помощью pip и не получаю никаких сообщений об ошибках.

Подробности:

Я использую,

  • Ubuntu
  • IPython v0.11
  • Python v2.6.6
  • matplotlib v1.0.1

Ответы:


177

Если я установлю свой бэкэнд templateв ~/.matplotlib/matplotlibrc, то я могу воспроизвести ваши симптомы:

~ / .Matplotlib / matplotlibrc:

# backend      : GtkAgg
backend      : template

Обратите внимание, что файл matplotlibrcне может быть в каталоге ~/.matplotlib/. В этом случае следующий код показывает, где он находится:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

In [1]: import matplotlib.pyplot as p

In [2]: p.plot(range(20),range(20))
Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]

In [3]: p.show()

Если вы отредактируете ~/.matplotlib/matplotlibrcи измените бэкэнд на что-то вроде GtkAgg, вы должны увидеть график. Вы можете перечислить все доступные бэкэнды на вашем компьютере с помощью

import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

Он должен вернуть список вроде:

['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
'ps', 'svg', 'template']

Ссылка:


2
Я пытался, но я получил ошибку что-то вроде:ImportError: No module named _backend_gdk
Баская

6
Извините за много комментариев. Оно работает. Я попробовал Qt4Agg и нажал. Спасибо :) .. Последнее, где я могу найти стандартный matplotlibrc или есть ли способ создать его?
Баская

Извините за неопрятность. Я думаю, что нашел
Баская

8
Этот ответ старый, конфиг теперь должен быть ~/.config/matplotlib/matplotlibrc(по крайней мере для Python 3). У меня просто была связанная проблема, и я думаю, что она была вызвана использованием matplotlib в python 2.7, который создал ~/.matplotlib/каталог и остановил python 3 от чтения конфигурации в ~/.config/matplotlib/. Удаление ~/.matplotlib/исправило проблему для меня.
naught101

5
6 лет спустя, и эта проблема все еще существует ... Теперь я помню, почему я ненавижу Python: проблема в каждой строке кода.
pookie

70

Я столкнулся с точно такой же проблемой на Ubuntu 12.04, потому что я установил matplotlib (в рамках virtualenv), используя

pip install matplotlib

Короче говоря, мой совет: не пытайтесь установить matplotlib, используя pip или вручную; пусть настоящий менеджер пакетов (например, apt-get / synaptic) установит его и все его зависимости для вас.

К сожалению, бэкэнды matplotlib (альтернативные методы для визуализации ваших графиков) имеют все виды зависимостей, с которыми pip не будет иметь дело. Еще хуже, это терпит неудачу тихо; то есть, pip install matplotlibкажется, для успешной установки matplotlib. Но когда вы попытаетесь использовать его (например pyplot.show()), окно графика не появится. Я попробовал все разные бэкэнды, которые предлагают люди в сети (Qt4Agg, GTK и т. Д.), И все они потерпели неудачу (то есть, когда я пытался импортировать matplotlib.pyplot, я получал, ImportErrorпотому что он пытался импортировать некоторую отсутствующую зависимость). Затем я исследовал, как установить эти зависимости, но мне просто захотелось отказаться от использования pip (в virtualenv) в качестве жизнеспособного решения для установки любого пакета, который имеет не-Python зависимости пакета.

Весь этот опыт заставил меня вернуться к apt-get / synaptic (то есть к менеджеру пакетов Ubuntu) для установки программного обеспечения, такого как matplotlib. Это сработало отлично. Конечно, это означает, что вы можете установить только в свои системные каталоги, без всякого добродетели virtualenv, и вы застряли с версиями, которые распространяет Ubuntu, что может сильно отставать от текущей версии ...


2
Ваш ответ - BIT long, вы можете рассмотреть сокращение для OP.
theJollySin

5
Вы пробовали --system-site-packagesвариант?
Тяньянг Ли

1
% Christopher Lee Проблема с цифрами, которые не отображаются без каких-либо ошибок / других жалоб, заключается в том, что бэкэнд по умолчанию, когда вы pip installесть agg. Я не уверен почему, но вы можете изменить его согласно ответу unutbu. pipимеет главное преимущество в установке актуальной версии - aptустанавливает устаревшую версию. Иногда есть исправления ошибок / новые функции, которые вы хотите / нужны.
drevicko

2
Просто деактивация virtualenvсработала! И я смог установить Matplotlib 1.4 из исходного кода всей системы (на Ubuntu), но не под virtualenv.
OSA

1
И какое решение для тех из нас, кто застрял на рабочих машинах Windows, которые не могут использовать apt-get?
ale19

34

% matplotlib встроенный

Для меня работа с блокнотом, добавление вышеуказанной строки, прежде чем сюжет работает.


Мне нужно было использовать %pylab inlineна своем ноутбуке, как отмечает @Bhanu Pratap Singh
Reed Sandberg

10

Для дальнейшего использования

Я столкнулся с той же проблемой - pylab не показывался под ipython. Проблема была исправлена ​​путем изменения файла конфигурации ipython {ipython_config.py}. В конфигурационном файле

c.InteractiveShellApp.pylab = 'auto'

Я изменил «Авто» на «QT» и теперь я вижу графики


5
или используя "ipython --pylab = qt"
Эндрю Кук

Это будет работать, но это лишь частичное решение: Если по умолчанию Бэкэнд agg, я не вещь , которая %pylab inlineбудет работать, и не будет показывать графики при запуске скриптов непосредственно , а именно: python myscript.py. Ответ unutbu должен исправить это везде.
drevicko


8

Что решило мою проблему, так это использование двух строчек в блокноте ipython вверху

%matplotib inline
%pylab inline

И это сработало. Я использую Ubuntu16.04 и ipython-5.1


Пожалуйста, исправьте форматирование вышеупомянутых комментариев ... Спасибо.
Сарас Арья

Готово - Хотя этот блог постит Pylab, но вы поймете, почему добавление %pylab inlineделает это работает.
Бхану Пратап Сингх

2

Мне пришлось установить matplotlib из исходного кода, чтобы заставить это работать. Основные инструкции (от http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/ ):

$ workon plotting
$ pip uninstall matplotlib
$ git clone https://github.com/matplotlib/matplotlib.git
$ cd matplotlib
$ python setup.py install

Изменяя бэкэнд, как говорит @unutbu, я просто столкнулся с большим количеством проблем, при этом все бэкэнды тоже не работали.


1
Работал, только использовал шаги настройки git clone и python, но когда я запустил его с plt.show (), никаких проблем.
Стив

2

Добавление следующих двух строк перед импортом pylab кажется мне подходящим

import matplotlib
matplotlib.use("gtk")

import sys
import pylab
import numpy as np

0

Убедитесь, что этот скрипт запуска включен: («Настройки»> «Консоль»> «Дополнительные параметры»)

/usr/lib/python2.7/dist-packages/spyderlib/scientific_startup.py

Если включен стандартный PYTHONSTARTUP, у вас не будет интерактивного сюжета.


0

Подобно @Rikki, я решил эту проблему путем обновления matplotlibс pip install matplotlib --upgrade. Если вы не можете обновить, удаление и повторная установка могут работать.

pip uninstall matplotlib
pip install matplotlib

0

Для меня проблема возникает, если я просто создаю пустой matplotlibrc файл ~/.matplotlibв MacOS. Добавление в него «backend: macosx» решает проблему.

Я думаю, что это ошибка: если backendне указан в моем, matplotlibrcон должен принимать значение по умолчанию.



0

Я обнаружил, что мне нужно, window = Tk()а затемwindow.mainloop()


Можете ли вы добавить немного объяснения? Чем ваше решение отличается от других?
Ральф Стубнер

-2

Для Ubuntu 12.04:

sudo apt-get install python-qt4
virtualenv .env --no-site-packages
source .env/bin/activate
easy_install -U distribute
ln -s /usr/lib/python2.7/dist-packages/PyQt4 .
ln -s /usr/lib/python2.7/dist-packages/sip.so .
pip install matplotlib
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.