Automatycznie uruchamiaj% matplotlib inline w notatniku IPython

92

Za każdym razem, gdy uruchamiam Notatnik IPython, pierwsze polecenie, które wykonuję, to

%matplotlib inline

Czy jest jakiś sposób na zmianę mojego pliku konfiguracyjnego, aby po uruchomieniu IPython był automatycznie w tym trybie?

8one6
źródło
1
Czy „ipython -pylab” działa?
Chris Arena,
Jeśli tak, możesz użyć aliasu ipython, aby zrobić to całkiem łatwo.
Chris Arena
5
ipython --matplotlibjest lepsze
tacaswell
Proszę zignoruj nagrodę . Wybrana odpowiedź działa w przypadku wersji 5.5.0. Zamknę zlecenie po obowiązkowym 24-godzinnym okresie. Przepraszam za to!
Ricardo Cruz
Założę się, że spędziłeś więcej czasu wpisując to pytanie i próbując wdrożyć rozwiązanie, niż po prostu wkleić je na początek swojego notebooka: D
Inteligentna infrastruktura

Odpowiedzi:

83

Sposób konfiguracji

IPython ma profile do konfiguracji, znajdujące się pod adresem ~/.ipython/profile_*. Nazwa profilu domyślnego profile_default. W tym folderze znajdują się dwa podstawowe pliki konfiguracyjne:

  • ipython_config.py
  • ipython_kernel_config.py

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

Odradza się korzystanie z funkcji w %pylabcelu drukowania w wierszu .

Wprowadza do przestrzeni nazw wszelkiego rodzaju śmieci, których po prostu nie potrzebujesz.

%matplotlibz drugiej strony umożliwia kreślenie w tekście bez wprowadzania przestrzeni nazw. Będziesz musiał wykonać jawne wywołania, aby zaimportować matplotlib i numpy.

import matplotlib.pyplot as plt
import numpy as np

Niewielka cena jawnego wpisywania importu na maszynie powinna zostać całkowicie przezwyciężona faktem, że masz teraz odtwarzalny kod.

Kyle Kelley
źródło
2
Dzięki. W rzeczywistości widziałem tę opcję konfiguracyjną w dokumentacji matplotlib, ale nie byłem pewien, czy po prostu ustawiła zaplecze matplotlib, które zacznie obowiązywać po ręcznym wywołaniu,%matplotlib czy też ustawia domyślny backend i automatycznie konfiguruje go do natychmiastowego użycia w Środowisko iPython.
8one6
3
Aby dodać do edycji @Kyle Kelley w odniesieniu do matplotlibvs pylab, iPython bardzo ułatwia automatyczne wykonywanie dowolnego kodu Pythona za każdym razem, gdy uruchamiasz za pomocą Profiles. Uważam, że profil, w którym automatycznie wykonuje się wspólne importowanie, np. import numpy as np; import pandas as pd; import matplotlib.pyplot as pltItp., Jest dość powszechny . Uwaga: pylabto nie to samo co pyplot. Zrozumienie tego musiało zająć mi miesiąc.
8one6
3
To (podobnie jak odpowiedź SillyBeara) przestało działać z IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 sugeruje użycie „c.IPKernel.matplotlib” ... co też nie działa .
Pietro Battiston
3
Ta odpowiedź zadziałała dla mnie. W IPythonie 3 najwyraźniej jest nowy plik konfiguracyjny ipython_kernel_config.py, który zawiera tę opcję. Utwórz nowy profil ( ipython profile create test), aby uzyskać domyślny.
DGrady
3
Wydaje się, że nazwa tej opcji została zmieniona nac.InteractiveShellApp.matplotlib = "inline"
tiago
6

Myślę, że chcesz uruchomić następujące polecenie z wiersza poleceń:

ipython notebook --matplotlib=inline

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

SillyBear
źródło
1
Zmień swój post na --matplotlib inlinei usuń rzeczy --pylab. Zobacz ten post dotyczący ipython devel why: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob
1
Jedna uwaga na temat matplotlib=inline: Spowolni to każde uruchamiane jądro, niezależnie od tego, czy chcesz używać matplotlib.
Kyle Kelley
7
To już nie działa (przynajmniej od IPythona 4). Opcje wiersza poleceń --matplotliblub --pylabsą ignorowane.
tiago
1
Pomoc dotycząca pomocy wiersza poleceń Jupyter mówi, że te opcje są wyłączone i powinny używać zamiast tego %pylablub %matplotlib.
Cas
4

To ustawienie zostało wyłączone w wersjach Jupyter 5.Xi nowszych, dodając poniższy kod

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)

W poprzednich wersjach było to głównie ostrzeżenie. Ale to nie jest duży problem, ponieważ Jupyter używa koncepcji kernelsi możesz znaleźć jądro dla swojego projektu, uruchamiając poniższe polecenie

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

To daje mi ścieżkę do folderu jądra. Jeśli teraz otworzę /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonplik, widzę coś takiego jak poniżej

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

Możesz więc zobaczyć, jakie polecenie jest wykonywane, aby uruchomić jądro. Więc jeśli uruchomisz 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 kernel.jsonplik do

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

A jeśli uruchomię jupyter notebookwykresy są automatycznieinline

Auto Inline

Zauważ, że poniższe podejście również działa, w którym tworzysz plik w poniższej ścieżce

~ / .ipython / profile_default / ipython_kernel_config.py

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

Jednak wadą tego podejścia jest to, że ma to globalny wpływ na każde środowisko używające Pythona. Możesz to uznać za zaletę również wtedy, gdy chcesz mieć wspólne zachowanie w różnych środowiskach z jedną zmianą.

Wybierz podejście, które chcesz zastosować, w oparciu o swoje wymagania

Tarun Lalwani
źródło
3

W ipython_config.pypliku wyszukaj następujące wiersze

# c.InteractiveShellApp.matplotlib = None

i

# c.InteractiveShellApp.pylab = None

i odkomentuj je. Następnie przejdź Nonedo używanego zaplecza (używam 'qt4') i zapisz plik. Zrestartuj IPython i powinny zostać załadowane matplotlib i pylab - możesz użyć dir()polecenia, aby sprawdzić, które moduły znajdują się w globalnej przestrzeni nazw.

MattDMo
źródło
3

W (bieżącym) IPythonie 3.2.0 (Python 2 lub 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 to zaraz po

c = get_config()
memebrain
źródło
2

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

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

Zmiana

# 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.

Chris Hanning
źródło
2

Utwórz dowolny .pyplik w ~/.ipython/profile_default/startup/zawierającym

get_ipython().magic('matplotlib inline')
flow2k
źródło