Automatycznie uruchom %matplotlib inline w notebooku IPython

Za każdym razem, gdy uruchamiam Notebook IPython, pierwszą komendą, którą uruchamiam jest

%matplotlib inline

Czy Jest jakiś sposób, aby zmienić mój plik konfiguracyjny tak, że po uruchomieniu IPython, jest on automatycznie w tym trybie?

Author: Kyle Kelley, 2014-01-17

6 answers

Sposób konfiguracji

IPython posiada profile konfiguracji, znajdujące się pod adresem ~/.ipython/profile_*. Domyślny Profil nazywa się profile_default. W tym folderze znajdują się dwa podstawowe pliki konfiguracyjne:

  • ipython_config.py
  • ipython_kernel_config

Dodaj opcję inline dla matplotlib do ipython_kernel_config.py:

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

Matplotlib vs. pylab

Użycie {[7] } do tworzenia wykresów inline jest zniechęcane.

Wprowadza do Twojej przestrzeni nazw różnego rodzaju gunk, które po prostu nie potrzebujesz.

%matplotlib z drugiej strony umożliwia kreślenie w linii bez wstrzykiwania przestrzeni nazw. Aby zaimportować matplotlib i numpy, musisz wykonać jawne wywołania.

import matplotlib.pyplot as plt
import numpy as np

Mała cena wpisywania twojego importu powinna być całkowicie przezwyciężona przez fakt, że teraz masz powtarzalny kod.

 64
Author: Kyle Kelley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 10:49:53

Myślę, że to, co chcesz, może być uruchomienie następujących z linii poleceń:

ipython notebook --matplotlib=inline

Jeśli nie lubisz wpisywać go w wierszu cmd za każdym razem, możesz utworzyć alias, który zrobi to za Ciebie.

 6
Author: SillyBear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-12 03:12:06

W pliku ipython_config.py wyszukaj następujące linie

# c.InteractiveShellApp.matplotlib = None

I

# c.InteractiveShellApp.pylab = None

I ich odkomentować. Następnie zmień None na backend, którego używasz (ja używam 'qt4') i zapisz plik. Uruchom ponownie IPython, a matplotlib i pylab powinny zostać załadowane - możesz użyć polecenia dir(), aby sprawdzić, które Moduły znajdują się w globalnej przestrzeni nazw.

 3
Author: MattDMo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-17 14:56:38

In (the current) IPython 3.2.0 (Python 2 or 3)

Otwórz plik konfiguracyjny w ukrytym folderze .ipython

~/.ipython/profile_default/ipython_kernel_config.py

Dodaj następujący wiersz

c.IPKernelApp.matplotlib = 'inline'

Dodaj go prosto po

c = get_config()
 3
Author: memebrain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-12 14:12:45

Ustawienie zostało wyłączone w Jupyter 5.X i wyższych poprzez dodanie poniższego kodu

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)

I w poprzednich wersjach było to głównie Ostrzeżenie. Ale nie jest to duży problem, ponieważ Jupyter używa pojęć kernels i możesz znaleźć jądro dla swojego projektu, uruchamiając poniżej komendę

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

To daje mi ścieżkę do katalogu jądra. Teraz, gdy otwieram plik /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json, widzę coś takiego jak poniżej

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

Więc możesz zobaczyć, jakie polecenie jest wykonywane, aby uruchomić jądro. Więc jeśli biegniesz poniższe polecenie

$ 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`

Więc teraz, jeśli zaktualizujemy nasz plik kernel.json do

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

I jeśli uruchomię jupyter notebook wykresy są automatycznie inline

Auto Inline

Uwaga poniższe podejście nadal działa, gdzie tworzysz plik na poniższej ścieżce

~/.ipython/profile_default/ipython_kernel_config.py

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

Ale wadą tego podejścia jest to, że jest to globalny wpływ na każde środowisko używające Pythona. Możesz rozważyć to również zaleta, jeśli chcesz mieć wspólne zachowanie w różnych środowiskach z jedną zmianą.

Więc wybierz, które podejście chcesz użyć w oparciu o swoje wymagania

 3
Author: Tarun Lalwani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 16:25:19

Dalej do @ Kyle Kelley i @DGrady, oto wpis, który można znaleźć w

$HOME/.ipython/profile_default/ipython_kernel_config.py (lub który profil utworzyłeś)

Zmień

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

Do

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

Będzie to działać zarówno w sesjach ipython qtconsole, jak i notebook.

 2
Author: Chris Hanning,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-17 10:09:41