Автоматически запускать% matplotlib inline в IPython Notebook


92

Каждый раз, когда я запускаю IPython Notebook, я запускаю первую команду:

%matplotlib inline

Есть ли способ изменить мой файл конфигурации, чтобы при запуске IPython он автоматически находился в этом режиме?


1
Работает ли ipython -pylab?
Chris Arena

Если это так, вы можете использовать псевдоним ipython, чтобы сделать это довольно легко.
Chris Arena

5
ipython --matplotlibis better
tacaswell

Пожалуйста, не обращайте внимания на награду . Выбранный ответ действительно работает для 5.5.0. Я закрою награду по истечении обязательного 24-часового периода. Прости за это!
Рикардо Крус,

Готов поспорить, вы потратили больше времени, набирая этот вопрос и пытаясь реализовать решение, чем просто вставляя его в начало своего ноутбука: D
Интеллектуальная инфраструктура,

Ответы:


83

Способ конфигурации

IPython имеет профили для настройки, расположенные по адресу ~/.ipython/profile_*. Профиль по умолчанию называется profile_default. В этой папке есть два основных файла конфигурации:

  • ipython_config.py
  • ipython_kernel_config.py

Добавьте встроенный параметр для matplotlib в ipython_kernel_config.py:

c = get_config()
# ... Any other configurables you want to set
c.InteractiveShellApp.matplotlib = "inline"

matplotlib против pylab

Использование %pylabдля получения встроенного графика не рекомендуется .

Он вводит в ваше пространство имен всевозможный мусор, который вам просто не нужен.

%matplotlibс другой стороны, позволяет строить график без ввода вашего пространства имен. Вам нужно будет сделать явные вызовы, чтобы импортировать matplotlib и numpy.

import matplotlib.pyplot as plt
import numpy as np

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


2
Спасибо. Я действительно видел этот параметр конфигурации в документации matplotlib, но не был уверен, просто ли он установил бэкэнд matplotlib, который вступит в силу после того, как вы вручную%matplotlib вызовете, или он установил бэкэнд по умолчанию и автоматически настроил его для использования немедленно в Среда iPython.
8one6

3
Чтобы добавить к редактированию @Kyle Kelley относительно matplotlibvs pylab, iPython упрощает автоматическое выполнение произвольного кода Python при каждом запуске с использованием профилей. Я считаю, что довольно часто бывает профиль, в котором вы автоматически выполняете общий импорт, например import numpy as np; import pandas as pd; import matplotlib.pyplot as plt, и т. Д. NB: pylabэто не то же самое, что pyplot. Мне понадобился месяц, чтобы осознать это.
8one6

3
Этот (а также ответ SillyBear) перестал работать с IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 предлагает использовать «c.IPKernel.matplotlib» ... что тоже не работает. .
Пьетро Баттистон,

3
Этот ответ сработал для меня. В IPython 3, очевидно, есть новый файл конфигурации ipython_kernel_config.py, содержащий эту опцию. Создайте новый профиль ( ipython profile create test), чтобы получить профиль по умолчанию.
DGrady

3
Эта опция, кажется, была переименована вc.InteractiveShellApp.matplotlib = "inline"
tiago

6

Я думаю, что вы можете запустить из командной строки следующее:

ipython notebook --matplotlib=inline

Если вам не нравится каждый раз вводить его в строке cmd, вы можете создать псевдоним, который сделает это за вас.


1
Пожалуйста, измените свой пост на --matplotlib inlineи удалите материал --pylab. См. Эту публикацию ipython devel why: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Якоб

1
Одно замечание matplotlib=inline: он замедлит каждое запускаемое вами ядро, независимо от того, хотите ли вы использовать matplotlib.
Кайл Келли

7
Это больше не работает (по крайней мере, с IPython 4). Параметры командной строки --matplotlibили --pylabигнорируются.
tiago

1
В справке по командной строке Jupyter говорится, что эти параметры отключены и следует использовать %pylabили %matplotlibвместо них.
Cas

4

Параметр был отключен в Jupyter 5.Xи выше путем добавления кода ниже

pylab = Unicode('disabled', config=True,
    help=_("""
    DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
    """)
)

@observe('pylab')
def _update_pylab(self, change):
    """when --pylab is specified, display a warning and exit"""
    if change['new'] != 'warn':
        backend = ' %s' % change['new']
    else:
        backend = ''
    self.log.error(_("Support for specifying --pylab on the command line has been removed."))
    self.log.error(
        _("Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself.").format(backend)
    )
    self.exit(1)

А в предыдущих версиях это было главным образом предупреждением. Но это не большая проблема, потому что Jupyter использует концепции, kernelsи вы можете найти ядро ​​для своего проекта, выполнив команду ниже

$ jupyter kernelspec list
Available kernels:
  python3    /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3

Это дает мне путь к папке ядра. Теперь, если я открываю /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonфайл, я вижу что-то вроде ниже

{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}",
 ],
 "display_name": "Python 3",
 "language": "python"
}

Итак, вы можете увидеть, какая команда выполняется для запуска ядра. Итак, если вы запустите следующую команду

$ python -m ipykernel_launcher --help
IPython: an enhanced interactive Python shell.

Subcommands
-----------

Subcommands are launched as `ipython-kernel cmd [args]`. For information on
using subcommand 'cmd', do: `ipython-kernel cmd -h`.

install
    Install the IPython kernel

Options
-------

Arguments that take values are actually convenience aliases to full
Configurables, whose aliases are listed on the help line. For more information
on full configurables, see '--help-all'.

....
--pylab=<CaselessStrEnum> (InteractiveShellApp.pylab)
    Default: None
    Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
    Pre-load matplotlib and numpy for interactive use, selecting a particular
    matplotlib backend and loop integration.
--matplotlib=<CaselessStrEnum> (InteractiveShellApp.matplotlib)
    Default: None
    Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
    Configure matplotlib for interactive use with the default matplotlib
    backend.
...    
To see all available configurables, use `--help-all`

Итак, теперь, если мы обновим наш kernel.jsonфайл до

{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}",
  "--pylab",
  "inline"
 ],
 "display_name": "Python 3",
 "language": "python"
}

И если я запускаю jupyter notebookграфики автоматическиinline

Авто встроенный

Обратите внимание, что приведенный ниже подход также все еще работает, когда вы создаете файл по указанному ниже пути

~ / .ipython / profile_default / ipython_kernel_config.py

c = get_config()
c.IPKernelApp.matplotlib = 'inline'

Но недостатком этого подхода является то, что он оказывает глобальное влияние на каждую среду, в которой используется Python. Вы можете рассматривать это как преимущество также, если хотите иметь общее поведение в разных средах с одним изменением.

Поэтому выберите подход, который вы хотите использовать, исходя из ваших требований.


3

В своем ipython_config.pyфайле найдите следующие строки

# c.InteractiveShellApp.matplotlib = None

а также

# c.InteractiveShellApp.pylab = None

и раскомментируйте их. Затем перейдите Noneна бэкэнд, который вы используете (я использую 'qt4'), и сохраните файл. Перезапустите IPython, и должны быть загружены matplotlib и pylab - вы можете использовать dir()команду, чтобы проверить, какие модули находятся в глобальном пространстве имен.


3

В (текущем) IPython 3.2.0 (Python 2 или 3)

Откройте файл конфигурации в скрытой папке .ipython

~/.ipython/profile_default/ipython_kernel_config.py

добавьте следующую строку

c.IPKernelApp.matplotlib = 'inline'

добавить это сразу после

c = get_config()

2

В дополнение к @Kyle Kelley и @DGrady, вот запись, которую можно найти в

$HOME/.ipython/profile_default/ipython_kernel_config.py (или какой бы профиль вы ни создали)

+ Изменить

# Configure matplotlib for interactive use with the default matplotlib backend.
# c.IPKernelApp.matplotlib = none

к

# Configure matplotlib for interactive use with the default matplotlib backend.
c.IPKernelApp.matplotlib = 'inline'

Затем это будет работать как в сеансах ipython qtconsole, так и в сеансах ноутбука.


2

Создайте любой .pyфайл, ~/.ipython/profile_default/startup/содержащий

get_ipython().magic('matplotlib inline')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.