Führen Sie% matplotlib automatisch in IPython Notebook inline aus

91

Jedes Mal, wenn ich IPython Notebook starte, ist der erste Befehl, den ich ausführe

%matplotlib inline

Gibt es eine Möglichkeit, meine Konfigurationsdatei so zu ändern, dass sie sich beim Starten von IPython automatisch in diesem Modus befindet?

8one6
quelle
1
Funktioniert 'ipython-pylab'?
Chris Arena
Wenn ja, können Sie ipython als Alias ​​verwenden, um dies ganz einfach zu tun.
Chris Arena
5
ipython --matplotlibist besser
Tacaswell
Bitte ignorieren Sie das Kopfgeld . Die ausgewählte Antwort funktioniert für 5.5.0. Ich werde das Kopfgeld nach Ablauf der vorgeschriebenen 24-Stunden-Frist schließen. Das tut mir leid!
Ricardo Cruz
Ich wette, Sie haben mehr Zeit damit verbracht, diese Frage zu tippen und zu versuchen, die Lösung zu implementieren, als sie einfach in den Anfang Ihres Notizbuchs einzufügen: D
Intelligent-Infrastructure

Antworten:

82

Der Konfigurationsweg

IPython verfügt über Profile für die Konfiguration unter ~/.ipython/profile_*. Das Standardprofil wird aufgerufen profile_default. In diesem Ordner befinden sich zwei primäre Konfigurationsdateien:

  • ipython_config.py
  • ipython_kernel_config.py

Fügen Sie die Inline-Option für matplotlib hinzu zu ipython_kernel_config.py:

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

Matplotlib vs. Pylab

Von der Verwendung von %pylabInline-Plots wird abgeraten .

Es führt alle Arten von Gunk in Ihren Namespace ein, die Sie einfach nicht benötigen.

%matplotlibAuf der anderen Seite können Sie Inline-Plots erstellen, ohne Ihren Namespace einzufügen. Sie müssen explizite Aufrufe ausführen, um matplotlib und numpy zu importieren.

import matplotlib.pyplot as plt
import numpy as np

Der geringe Preis für das explizite Eingeben Ihrer Importe sollte vollständig durch die Tatsache überwunden werden, dass Sie jetzt reproduzierbaren Code haben.

Kyle Kelley
quelle
2
Vielen Dank. Ich hatte diese Konfigurationsoption tatsächlich in den matplotlib-Dokumenten gesehen, war mir aber nicht sicher, ob sie nur das matplotlib-Backend festlegte, das nach einem manuellen Aufruf%matplotlib wirksam werden würde, oder ob beide das Standard-Backend festlegten und es automatisch für die sofortige Verwendung in der einrichteten iPython-Umgebung.
8one6
3
IPython macht es sehr einfach, bei jedem Start mit Profiles automatisch beliebigen Python-Code auszuführen , um @Kyle Kelleys Bearbeitung in Bezug auf matplotlibvs zu pylabergänzen. Ich glaube, es ist durchaus üblich, ein Profil zu haben, in dem Sie automatisch übliche Importe wie import numpy as np; import pandas as pd; import matplotlib.pyplot as pltusw. ausführen. NB: pylabist nicht dasselbe wie pyplot. Ich muss einen Monat gebraucht haben, um das zu realisieren.
8one6
3
Dies (sowie die Antwort von SillyBear) funktioniert nicht mehr mit IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 schlägt vor, "c.IPKernel.matplotlib" zu verwenden ... was auch nicht funktioniert .
Pietro Battiston
3
Diese Antwort hat bei mir funktioniert. In IPython 3 gibt es anscheinend eine neue Konfigurationsdatei ipython_kernel_config.py, die diese Option enthält. Erstellen Sie ein neues Profil ( ipython profile create test), um eine Standardeinstellung zu erhalten.
DGrady
3
Diese Option scheint inc.InteractiveShellApp.matplotlib = "inline"
tiago
6

Ich denke, Sie möchten möglicherweise Folgendes über die Befehlszeile ausführen:

ipython notebook --matplotlib=inline

Wenn Sie es nicht jedes Mal in die cmd-Zeile eingeben möchten, können Sie einen Alias ​​erstellen, der dies für Sie erledigt.

SillyBear
quelle
1
Bitte ändern Sie Ihren Beitrag in --matplotlib inlineund entfernen Sie das --pylab-Zeug. Siehe diesen Beitrag einer Ipython-Entwicklung, warum: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob
1
Ein Hinweis zu matplotlib=inline: Es verlangsamt jeden Kernel, den Sie starten, unabhängig davon, ob Sie matplotlib verwenden möchten.
Kyle Kelley
7
Dies funktioniert nicht mehr (zumindest ab IPython 4). Die Befehlszeilenoptionen --matplotliboder --pylabwerden ignoriert.
Tiago
1
In der Hilfe zur Jupyter-Befehlszeilenhilfe heißt es, dass diese Optionen deaktiviert sind und stattdessen %pylaboder %matplotlibverwendet werden sollten.
Cas
4

Die Einstellung wurde in Jupyter 5.Xund höher durch Hinzufügen des folgenden Codes deaktiviert

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)

Und in früheren Versionen war es hauptsächlich eine Warnung. Dies ist jedoch kein großes Problem, da Jupyter Konzepte von verwendet kernelsund Sie den Kernel für Ihr Projekt finden können, indem Sie den folgenden Befehl ausführen

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

Dies gibt mir den Pfad zum Kernel-Ordner. Wenn ich jetzt die /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonDatei öffne , sehe ich so etwas wie unten

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

So können Sie sehen, welcher Befehl ausgeführt wird, um den Kernel zu starten. Wenn Sie also den folgenden Befehl ausführen

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

Also jetzt, wenn wir unsere kernel.jsonDatei auf aktualisieren

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

Und wenn ich laufe, sind jupyter notebookdie Grafiken automatischinline

Auto Inline

Beachten Sie, dass der folgende Ansatz auch weiterhin funktioniert, wenn Sie eine Datei im folgenden Pfad erstellen

~ / .ipython / profile_default / ipython_kernel_config.py

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

Der Nachteil dieses Ansatzes ist jedoch, dass dies eine globale Auswirkung auf jede Umgebung ist, die Python verwendet. Sie können dies auch dann als Vorteil betrachten, wenn Sie mit einer einzigen Änderung ein gemeinsames Verhalten in verschiedenen Umgebungen erzielen möchten.

Wählen Sie also den Ansatz, den Sie basierend auf Ihren Anforderungen verwenden möchten

Tarun Lalwani
quelle
3

ipython_config.pySuchen Sie in Ihrer Datei nach den folgenden Zeilen

# c.InteractiveShellApp.matplotlib = None

und

# c.InteractiveShellApp.pylab = None

und kommentiere sie aus. Wechseln Sie dann Nonezu dem Backend, das Sie verwenden (ich verwende 'qt4'), und speichern Sie die Datei. Starten Sie IPython neu, und matplotlib und pylab sollten geladen werden. Mit dem dir()Befehl können Sie überprüfen, welche Module sich im globalen Namespace befinden.

MattDMo
quelle
3

In (dem aktuellen) IPython 3.2.0 (Python 2 oder 3)

Öffnen Sie die Konfigurationsdatei im versteckten Ordner .ipython

~/.ipython/profile_default/ipython_kernel_config.py

Fügen Sie die folgende Zeile hinzu

c.IPKernelApp.matplotlib = 'inline'

füge es gleich danach hinzu

c = get_config()
Memebrain
quelle
2

Neben @Kyle Kelley und @DGrady finden Sie hier den Eintrag in der

$HOME/.ipython/profile_default/ipython_kernel_config.py (oder welches Profil Sie erstellt haben)

Veränderung

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

zu

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

Dies funktioniert dann sowohl in ipython qtconsole- als auch in Notebook-Sitzungen.

Chris Hanning
quelle
2

Erstellen Sie eine beliebige .pyDatei ~/.ipython/profile_default/startup/mit

get_ipython().magic('matplotlib inline')
flow2k
quelle