Автоматически запускать встроенный %matplotlib в блокноте IPython

Каждый раз, когда я запускаю блокнот IPython, первая команда, которую я запускаю, это

%matplotlib inline

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


person 8one6    schedule 17.01.2014    source источник
comment
Работает ли «ipython-pylab»?   -  person Chris Arena    schedule 17.01.2014
comment
Если это так, вы можете использовать псевдоним ipython, чтобы сделать это довольно легко.   -  person Chris Arena    schedule 17.01.2014
comment
ipython --matplotlib лучше   -  person tacaswell    schedule 18.01.2014
comment
Пожалуйста, игнорируйте награду. Выбранный ответ работает для 5.5.0. Я закрою награду после обязательного 24-часового периода. Извини за это!   -  person Ricardo Magalhães Cruz    schedule 11.05.2018
comment
Бьюсь об заклад, вы потратили больше времени на ввод этого вопроса и попытки реализовать решение, чем просто вставить его в начало своей записной книжки: D   -  person Intelligent-Infrastructure    schedule 09.08.2018


Ответы (7)


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

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

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

person Kyle Kelley    schedule 17.01.2014
comment
Спасибо. На самом деле я видел этот параметр конфигурации в документах matplotlib, но не был уверен, устанавливает ли он просто бэкэнд matplotlib, который вступит в силу после того, как вы вручную вызовете %matplotlib, или он одновременно устанавливает бэкэнд по умолчанию и < i>автоматически настроить для немедленного использования в среде iPython. - person 8one6; 17.01.2014
comment
Чтобы добавить к редактированию @Kyle Kelley относительно matplotlib vs pylab, iPython позволяет очень легко автоматически выполнять произвольный код Python каждый раз, когда вы запускаете с помощью профилей. Я считаю, что профиль, в котором вы автоматически выполняете общие операции импорта, такие как import numpy as np; import pandas as pd; import matplotlib.pyplot as plt и т. д., является довольно распространенным явлением. NB: pylab не то же самое, что pyplot. Должно быть, мне понадобился месяц, чтобы понять это. - person 8one6; 17.01.2014
comment
Это (а также ответ SillyBear) перестало работать с IPython 3. github. com/ipython/docker-notebook/pull/7#issuecomment-54729770 предлагает использовать c.IPKernel.matplotlib... который тоже не работает. - person Pietro Battiston; 29.03.2015
comment
Этот ответ сработал для меня. В IPython 3, по-видимому, есть новый файл конфигурации, ipython_kernel_config.py, который содержит эту опцию. Создайте новый профиль (ipython profile create test), чтобы получить профиль по умолчанию. - person DGrady; 04.06.2015
comment
Эта опция, кажется, была переименована в c.InteractiveShellApp.matplotlib = "inline" - person tiago; 26.08.2015
comment
Боже, это должно быть высоко в Google. Спасибо за комментарий @tiago. Кажется, мне лучше поместить сюда и конфигурацию, ориентированную на Jupyter... - person Kyle Kelley; 27.08.2015
comment
Может ли кто-нибудь указать имя файла конфигурации и строку конфигурации, чтобы установить встроенный матплот по умолчанию в jupyter по состоянию на декабрь 2015 г.? Я искал часы и не могу заставить это работать. Имя файла ~/.jupyter/jupyter-notebook-config.py? Имя опции c.NotebookApp.matplotlib - person Chris Warth; 02.12.2015
comment
@ChrisWarth: Ни один из этих параметров не работает для меня. Я не уверен, в чем проблема, но я ожидаю, что оба варианта изменились или изменилось расположение файла. Я пытаюсь c.InteractiveShellApp.matplotlib = "inline" в ~/.jupyter/jupyter_notebook_config.py. Моя цель - заставить это работать в ноутбуках Jupyter (только) и оставить оболочку IPython в покое. - person orome; 06.04.2016
comment
Есть ли способ просто сделать %matplotlib при запуске аналогичным образом? В настоящее время я делаю get_ipython().magic('matplotlib') в файле startup.py, что кажется неправильным способом сделать это. - person timgeb; 31.12.2018

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

ipython notebook --matplotlib=inline

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

person SillyBear    schedule 17.01.2014
comment
Пожалуйста, измените свой пост на --matplotlib inline и удалите материал --pylab. См. этот пост от разработчиков ipython, почему: carreau.github.io /posts/10-No-PyLab-Спасибо.ipynb.html - person Jakob; 22.01.2014
comment
Одно примечание о matplotlib=inline: оно будет замедлять каждое запускаемое вами ядро, независимо от того, хотите ли вы использовать matplotlib. - person Kyle Kelley; 06.10.2014
comment
Это больше не работает (по крайней мере, с IPython 4). Параметры командной строки --matplotlib или --pylab игнорируются. - person tiago; 26.08.2015
comment
В справке по командной строке Jupyter говорится, что эти параметры отключены и вместо них следует использовать %pylab или %matplotlib. - person Cas; 07.04.2017

Параметр был отключен в 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. Вы также можете рассматривать это как преимущество, если хотите иметь общее поведение в разных средах с одним изменением.

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

person Tarun Lalwani    schedule 11.05.2018

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

# c.InteractiveShellApp.matplotlib = None

а также

# c.InteractiveShellApp.pylab = None

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

person MattDMo    schedule 17.01.2014

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

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

~/.ipython/profile_default/ipython_kernel_config.py

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

c.IPKernelApp.matplotlib = 'inline'

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

c = get_config()
person memebrain    schedule 12.07.2015

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

get_ipython().magic('matplotlib inline')
person flow2k    schedule 23.09.2019

В дополнение к @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

to

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

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

person Chris Hanning    schedule 17.07.2015