Автоматично запустити% matplotlib вбудовано в блокноті IPython


91

Кожного разу, коли я запускаю IPython Notebook, першою командою, яку я запускаю, є

%matplotlib inline

Чи є спосіб змінити конфігураційний файл так, щоб при запуску IPython він автоматично переходив у цей режим?


1
Чи працює 'ipython -pylab'?
Chris Arena

Якщо так, ви можете створити псевдонім ipython, щоб зробити це досить легко.
Chris Arena

5
ipython --matplotlibкраще
tacaswell

Будь ласка, ігноруйте нагороду . Вибрана відповідь працює для 5.5.0. Я закрию нагороду після обов'язкового 24-годинного періоду. Вибач за це!
Рікардо Круз,

Б'юся об заклад, ви витратили більше часу на введення цього запитання та спроби впровадити рішення, ніж просто вставити його на початок свого блокнота: D
Intelligent-Infrastructure

Відповіді:


82

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

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 кожного разу, коли ви запускаєте програму Profiles. Я вважаю, що досить часто можна мати профіль, де ви автоматично робите загальні імпорти, наприклад import numpy as np; import pandas as pd; import matplotlib.pyplot as pltтощо. Примітка: 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"
тіаго

6

Я думаю, що ви хочете запустити наступне з командного рядка:

ipython notebook --matplotlib=inline

Якщо вам не подобається щоразу вводити його на рядку cmd, ви можете створити псевдонім, який зробить це за вас.


1
Будь ласка, змініть свою публікацію --matplotlib inlineта видаліть --pylab. Дивіться цю публікацію розробника ipython чому: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Якоб

1
Одне зауваження щодо matplotlib=inline: Це сповільнить роботу кожного ядра, яке ви запускаєте, незалежно від того, чи хочете ви використовувати matplotlib.
Kyle Kelley

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

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.