Exécuter automatiquement% matplotlib en ligne dans IPython Notebook


91

Chaque fois que je lance IPython Notebook, la première commande que j'exécute est

%matplotlib inline

Existe-t-il un moyen de modifier mon fichier de configuration afin que lorsque je lance IPython, il soit automatiquement dans ce mode?


1
'Ipython -pylab' fonctionne-t-il?
Chris Arena

Si tel est le cas, vous pouvez alias ipython pour le faire assez facilement.
Chris Arena

5
ipython --matplotlibest mieux
tacaswell

Veuillez ignorer la prime . La réponse sélectionnée fonctionne pour 5.5.0. Je fermerai la prime après la période obligatoire de 24 heures. Désolé pour ça!
Ricardo Cruz

Je parie que vous avez passé plus de temps à taper cette question et à essayer de mettre en œuvre la solution que de simplement la coller au début de votre ordinateur portable: D
Intelligent-Infrastructure

Réponses:


82

La manière de configuration

IPython a des profils pour la configuration, situés à ~/.ipython/profile_*. Le profil par défaut est appelé profile_default. Dans ce dossier, il y a deux fichiers de configuration principaux:

  • ipython_config.py
  • ipython_kernel_config.py

Ajoutez l'option en ligne pour matplotlib à ipython_kernel_config.py:

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

matplotlib contre pylab

L'utilisation de %pylabpour obtenir le traçage en ligne est déconseillée .

Il introduit toutes sortes de saletés dans votre espace de noms dont vous n'avez tout simplement pas besoin.

%matplotlibd'autre part, permet le traçage en ligne sans injecter votre espace de noms. Vous devrez faire des appels explicites pour importer matplotlib et numpy.

import matplotlib.pyplot as plt
import numpy as np

Le petit prix de la saisie explicite de vos importations doit être complètement surmonté par le fait que vous disposez désormais d'un code reproductible.


2
Merci. J'avais en fait vu cette option de configuration dans la documentation matplotlib, mais je ne savais pas si elle définissait simplement le backend matplotlib qui prendrait effet une fois que vous avez appelé manuellement%matplotlib ou s'il définissait à la fois le backend par défaut et le configurait automatiquement pour une utilisation immédiate dans le Environnement iPython.
8one6

3
Pour ajouter à la modification de @Kyle Kelley concernant matplotlibvs pylab, iPython facilite très facilement l'exécution automatique de code python arbitraire chaque fois que vous lancez à l'aide de Profiles. Je pense qu'il est assez courant d'avoir un profil où l'on fait automatiquement des importations courantes comme import numpy as np; import pandas as pd; import matplotlib.pyplot as plt, etc. NB: ce pylabn'est pas la même chose que pyplot. Il m'a fallu un mois pour m'en rendre compte.
8one6

3
Cela (ainsi que la réponse de SillyBear) a cessé de fonctionner avec IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 suggère d'utiliser "c.IPKernel.matplotlib" ... qui ne fonctionne pas non plus .
Pietro Battiston

3
Cette réponse a fonctionné pour moi. Dans IPython 3, il y a apparemment un nouveau fichier de configuration ipython_kernel_config.py, qui contient cette option. Créez un nouveau profil ( ipython profile create test) pour obtenir une valeur par défaut.
DGrady

3
Cette option semble avoir été renommée enc.InteractiveShellApp.matplotlib = "inline"
tiago

6

Je pense que vous voulez peut-être exécuter ce qui suit à partir de la ligne de commande:

ipython notebook --matplotlib=inline

Si vous n'aimez pas le taper à chaque fois sur la ligne cmd, vous pouvez créer un alias pour le faire à votre place.


1
Veuillez changer votre message --matplotlib inlineet supprimer le contenu --pylab. Voir ce post d'un ipython devel pourquoi: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob

1
Une note à propos de matplotlib=inline: cela ralentira chaque noyau que vous lancerez, que vous souhaitiez ou non utiliser matplotlib.
Kyle Kelley

7
Cela ne fonctionne plus (du moins à partir d'IPython 4). Les options de ligne de commande --matplotlibou --pylabsont ignorées.
tiago

1
L'aide de la ligne de commande Jupyter indique que ces options sont désactivées et doivent utiliser %pylabou à la %matplotlibplace.
Cas

4

Le paramètre a été désactivé dans Jupyter 5.Xet plus en ajoutant le code ci-dessous

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)

Et dans les versions précédentes, il s'agissait principalement d'un avertissement. Mais ce n'est pas un gros problème car Jupyter utilise des concepts de kernelset vous pouvez trouver le noyau pour votre projet en exécutant la commande ci-dessous

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

Cela me donne le chemin vers le dossier du noyau. Maintenant, si j'ouvre le /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonfichier, je vois quelque chose comme ci-dessous

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

Ainsi, vous pouvez voir quelle commande est exécutée pour lancer le noyau. Donc, si vous exécutez la commande ci-dessous

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

Alors maintenant, si nous mettons à jour notre kernel.jsonfichier

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

Et si je lance jupyter notebookles graphiques sont automatiquementinline

En ligne automatique

Notez que l'approche ci-dessous fonctionne également, où vous créez un fichier sur le chemin ci-dessous

~ / .ipython / profile_default / ipython_kernel_config.py

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

Mais l'inconvénient de cette approche est qu'il s'agit d'un impact global sur chaque environnement utilisant python. Vous pouvez également considérer cela comme un avantage si vous souhaitez avoir un comportement commun dans tous les environnements avec un seul changement.

Choisissez donc l'approche que vous souhaitez utiliser en fonction de vos besoins


3

Dans votre ipython_config.pyfichier, recherchez les lignes suivantes

# c.InteractiveShellApp.matplotlib = None

et

# c.InteractiveShellApp.pylab = None

et décommentez-les. Ensuite, Nonepassez au backend que vous utilisez (j'utilise 'qt4') et enregistrez le fichier. Redémarrez IPython, et matplotlib et pylab doivent être chargés - vous pouvez utiliser la dir()commande pour vérifier quels modules se trouvent dans l'espace de noms global.


3

Dans (l'actuel) IPython 3.2.0 (Python 2 ou 3)

Ouvrez le fichier de configuration dans le dossier caché .ipython

~/.ipython/profile_default/ipython_kernel_config.py

ajouter la ligne suivante

c.IPKernelApp.matplotlib = 'inline'

ajoutez-le juste après

c = get_config()

2

Suite à @Kyle Kelley et @DGrady, voici l'entrée qui se trouve dans le

$HOME/.ipython/profile_default/ipython_kernel_config.py (ou quel que soit le profil que vous avez créé)

Changement

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

Cela fonctionnera ensuite dans les sessions ipython qtconsole et notebook.


2

Créez n'importe quel .pyfichier ~/.ipython/profile_default/startup/contenant

get_ipython().magic('matplotlib inline')
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.