Как сделать IPython Notebook Matplotlib встроенным в сюжет

546

Я пытаюсь использовать ноутбук IPython на MacOS X с Python 2.7.2 и IPython 1.1.0.

Я не могу получить графику matplotlib, чтобы отображать встроенную.

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

Я также пробовал %pylab inline и аргументы командной строки ipython --pylab=inline, но это не имеет никакого значения.

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()

Вместо встроенной графики я получаю следующее:

<matplotlib.figure.Figure at 0x110b9c450>

И matplotlib.get_backend() показывает, что у меня есть бэкэнд 'module://IPython.kernel.zmq.pylab.backend_inline'.

  • 0
    Ваш фрагмент кода должен выдавать не <matplotlib.figure.Figure at 0x110b9c450> а <matplotlib.text.Text at 0x94f9320> (поскольку в последней строке печатается заголовок). В любом случае, ваш код (с встроенным% matplotlib и plt.show ()) работает как положено в Windows
  • 0
    Спасибо за эти предложения, но они не работают для меня. Я все еще получаю вышеупомянутый вывод без встроенной графики. Есть ли у вас какие-либо советы по устранению неполадок?
Показать ещё 6 комментариев
Теги:
matplotlib
ipython
ipython-notebook

10 ответов

769
Лучший ответ

Я использовал %matplotlib inline в первой ячейке ноутбука, и он работает. Я думаю, вы должны попробовать:

%matplotlib inline

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

Вы также можете всегда запускать все ваши ядра IPython во встроенном режиме по умолчанию, установив в конфигурационных файлах следующие параметры конфигурации:

c.IPKernelApp.matplotlib=<CaselessStrEnum>
  Default: None
  Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']
  Configure matplotlib for interactive use with the default matplotlib backend.
  • 7
    Я бы отметил это как правильный ответ. Альтернативный --pylab inline работает, но приветствует вас следующим предупреждением: запускать все ядра в режиме pylab не рекомендуется и будет отключен в следующем выпуске. Пожалуйста, используйте магию% matplotlib, чтобы вместо нее включить matplotlib. pylab подразумевает много импортов, которые могут иметь запутанные побочные эффекты и нанести ущерб воспроизводимости ваших ноутбуков.
  • 1
    @ eNord9 @mightwolf: я учусь использовать iPython (и программирование на Python вместо Matlab); что делает import matplotlib' do versus импорта matplotlib как [имя]»? Прости за упрощенный комментарий
Показать ещё 7 комментариев
139

Если ваша версия matplotlib выше 1.4, можно также использовать

IPython 3.x и выше

%matplotlib notebook

import matplotlib.pyplot as plt

более старые версии

%matplotlib nbagg

import matplotlib.pyplot as plt

Оба активируют nbagg backend, что позволяет интерактивность.

Изображение 2552

  • 0
    Это не похоже на работу с %config InlineBackend.figure_format='retina' . Есть идеи, как получить интерактивные фигуры Retina?
  • 0
    Хм ... У меня нет особого опыта с фигурами сетчатки. Единственное, на что я наткнулся, была эта ссылка , но она может быть устаревшей. Если больше людей интересуются тем же, я связываю ваш SO вопрос здесь и желаю вам удачи с ответами там. Лучший
Показать ещё 6 комментариев
59

Ctrl + Enter

%matplotlib inline

Волшебная линия: D

Смотрите: Построение графика с помощью Matplotlib.

  • 0
    Эта ссылка сейчас мертва.
  • 1
    @BradleyKreider Еще не умер. Кроме того, вы можете посетить репозиторий ipython на github, перейти в папку «example», найти блокнот «Plotting with Matplotlib».
Показать ещё 1 комментарий
19

Я не уверен, почему joaquin отправил свой ответ в качестве комментария, но это правильный ответ:

запустить ipython с помощью ipython notebook --pylab inline

Изменить: Хорошо, теперь это устарело в соответствии с комментарием ниже. Используйте магию% pylab.

  • 14
    Больше не нужно: «ipython notebook --pylab inline [E 15: 01: 18.182 NotebookApp] Удалена поддержка указания --pylab в командной строке. [E 15: 01: 18.182 NotebookApp] Пожалуйста, используйте %pylab inline или %matplotlib inline в саму тетрадь. "
9

Чтобы сделать matplotlib встроенным по умолчанию в Jupyter (IPython 3):

  • Редактировать файл ~/.ipython/profile_default/ipython_config.py

  • Добавить строку c.InteractiveShellApp.matplotlib = 'inline'

Обратите внимание, что добавление этой строки в ipython_notebook_config.py не будет работать. В противном случае он хорошо работает с Jupyter и IPython 3.1.0

8

Я должен согласиться с foobarbecue (у меня нет достаточно рецензий, чтобы просто вставить комментарий в свой пост):

Теперь было рекомендовано, чтобы python-ноутбук не запускался с аргументом --pylab, и согласно Фернандо Пересу (создателю ipythonnb) %matplotlib inline должна быть начальная команда ноутбука.

Смотрите здесь: http://nbviewer.ipython.org/github/ipython/ipython/blob/1.x/examples/notebooks/Part%203%20-%20Plotting%20with%20Matplotlib.ipynb

4

Я нашел обходное решение, которое вполне удовлетворительное. Я установил Anaconda Python, и теперь это работает для меня.

3

В Ubuntu вы можете удалить %matplotlib inline, пока у вас есть plt.show() после создания графика.

  • 0
    plt.show() работает в Windows, но его нужно добавлять после каждого рисунка. %matplotlib inline заключается в том, что при его вызове один раз все цифры в блокноте будут встроены.
2

Я установил anaconda, но matplotlib не строит

Он начинает заговор, когда я делал это

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  
0

Вы можете имитировать эту проблему с синтаксической ошибкой, однако %matplotlib inline не решит проблему.

Сначала пример правильного способа создания сюжета. Все работает так, как ожидалось, с импортом и магией, которые поставляются eNord9.

df_randNumbers1 = pd.DataFrame(np.random.randint(0,100,size=(100, 6)), columns=list('ABCDEF'))

df_randNumbers1.ix[:,["A","B"]].plot.kde()

Однако, оставив () с конца типа графика, вы получите несколько неоднозначную ошибку.

Нехороший код:

df_randNumbers1.ix[:,["A","B"]].plot.kde

Пример ошибки:

<bound method FramePlotMethods.kde of <pandas.tools.plotting.FramePlotMethods object at 0x000001DDAF029588>>

Помимо этого однострочного сообщения, нет трассировки стека или другой очевидной причины думать, что вы сделали синтаксическую ошибку. Сюжет не печатает.

  • 0
    Это не ошибка синтаксиса - без () для вызова kde , IPython говорит вам , что kde есть, а именно, связанный метод. Так что, на самом деле, с точки зрения iPython, это вовсе не «ошибка», поэтому и не существует трассировки стека.
  • 1
    @KyleStrand Спасибо. После перечитывания моего поста я должен был сказать следующее: «Я думал, что у меня возникла проблема с тем, чтобы мои графики не отображались встроенными с %matplotlib inline команды %matplotlib inline . На самом деле я просто забыл поставить () в конце типа графика. Так что, если все остальное терпит неудачу, посмотрите на свои круглые скобки для ошибки. "

Ещё вопросы

Сообщество Overcoder
Наверх
Меню