Esegui automaticamente% matplotlib inline in IPython Notebook


91

Ogni volta che avvio IPython Notebook, il primo comando che eseguo è

%matplotlib inline

C'è un modo per modificare il mio file di configurazione in modo che quando avvio IPython, sia automaticamente in questa modalità?


1
"Ipython -pylab" funziona?
Chris Arena

Se è così, puoi alias ipython per farlo abbastanza facilmente.
Chris Arena

5
ipython --matplotlibè meglio
tacaswell

Per favore ignora la taglia . La risposta selezionata funziona per 5.5.0. Chiuderò la taglia dopo il periodo obbligatorio di 24 ore. Mi dispiace per quello!
Ricardo Cruz

Scommetto che hai passato più tempo a digitare questa domanda e cercare di implementare la soluzione che semplicemente incollarla all'inizio del tuo notebook: D
Intelligent-Infrastructure

Risposte:


82

Il modo di configurazione

IPython ha profili per la configurazione, che si trovano in ~/.ipython/profile_*. Viene chiamato il profilo predefinito profile_default. All'interno di questa cartella sono presenti due file di configurazione principali:

  • ipython_config.py
  • ipython_kernel_config.py

Aggiungi l'opzione inline per matplotlib a ipython_kernel_config.py:

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

matplotlib contro pylab

L'utilizzo di %pylabper ottenere la stampa in linea è sconsigliato .

Introduce tutti i tipi di gunk nel tuo spazio dei nomi di cui non hai bisogno.

%matplotlibd'altra parte abilita la stampa in linea senza iniettare il tuo spazio dei nomi. Dovrai eseguire chiamate esplicite per importare matplotlib e numpy.

import matplotlib.pyplot as plt
import numpy as np

Il piccolo prezzo di digitare esplicitamente le tue importazioni dovrebbe essere completamente superato dal fatto che ora hai un codice riproducibile.


2
Grazie. Avevo effettivamente visto questa opzione di configurazione nei documenti di matplotlib, ma non ero sicuro se impostasse semplicemente il backend matplotlib che avrebbe avuto effetto una volta chiamato manualmente%matplotlib o se impostasse il backend predefinito e lo configurasse automaticamente per l'uso immediatamente nel Ambiente iPython.
8one6

3
Per aggiungere alla modifica di @Kyle Kelley relativa a matplotlibvs pylab, iPython rende molto semplice eseguire automaticamente codice Python arbitrario ogni volta che si avvia utilizzando Profili. Credo sia abbastanza comune avere un profilo in cui esegui automaticamente importazioni comuni come import numpy as np; import pandas as pd; import matplotlib.pyplot as plt, ecc. NB: nonpylab è la stessa cosa di . Devo aver impiegato un mese per rendermene conto. pyplot
8one6

3
Questo (così come la risposta di SillyBear) ha smesso di funzionare con IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 suggerisce di usare "c.IPKernel.matplotlib" ... che non funziona neanche .
Pietro Battiston

3
Questa risposta ha funzionato per me. In IPython 3 c'è apparentemente un nuovo file di configurazione,, ipython_kernel_config.pyche contiene questa opzione. Crea un nuovo profilo ( ipython profile create test) per ottenere quello predefinito.
DGrady

3
Questa opzione sembra essere stata ribattezzatac.InteractiveShellApp.matplotlib = "inline"
tiago

6

Penso che quello che vuoi potrebbe essere eseguire quanto segue dalla riga di comando:

ipython notebook --matplotlib=inline

Se non ti piace scriverlo ogni volta sulla riga cmd, puoi creare un alias per farlo per te.


1
Per favore cambia il tuo post --matplotlib inlinee rimuovi il contenuto di --pylab. Vedi questo post di uno sviluppo di ipython perché: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob

1
Una nota su matplotlib=inline: rallenterà ogni kernel che avvii, indipendentemente dal fatto che tu voglia usare matplotlib.
Kyle Kelley

7
Questo non funziona più (almeno a partire da IPython 4). Le opzioni della riga di comando --matplotlibo --pylabvengono ignorate.
tiago

1
La guida per la guida della riga di comando di Jupyter dice che queste opzioni sono disabilitate e dovrebbero usare %pylabo %matplotlibinvece.
Cas

4

L'impostazione è stata disabilitata in Jupyter 5.Xe superiori aggiungendo il codice sottostante

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)

E nelle versioni precedenti è stato principalmente un avvertimento. Ma questo non è un grosso problema perché Jupyter utilizza i concetti di kernelse puoi trovare il kernel per il tuo progetto eseguendo il comando sotto

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

Questo mi dà il percorso della cartella del kernel. Ora se apro il /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonfile, vedo qualcosa di simile sotto

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

Quindi puoi vedere quale comando viene eseguito per avviare il kernel. Quindi, se esegui il comando seguente

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

Quindi ora se aggiorniamo il nostro kernel.jsonfile in

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

E se eseguo jupyter notebooki grafici vengono automaticamenteinline

Inline automatico

Nota anche l'approccio seguente funziona ancora, dove crei un file nel percorso sottostante

~ / .ipython / profile_default / ipython_kernel_config.py

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

Ma lo svantaggio di questo approccio è che si tratta di un impatto globale su ogni ambiente che utilizza Python. Puoi considerarlo un vantaggio anche se vuoi avere un comportamento comune tra gli ambienti con una singola modifica.

Quindi scegli quale approccio desideri utilizzare in base alle tue esigenze


3

Nel tuo ipython_config.pyfile, cerca le seguenti righe

# c.InteractiveShellApp.matplotlib = None

e

# c.InteractiveShellApp.pylab = None

e rimuoverli. Quindi, Nonepassa al backend che stai utilizzando (io uso 'qt4') e salva il file. Riavvia IPython e matplotlib e pylab dovrebbero essere caricati: puoi usare il dir()comando per verificare quali moduli si trovano nello spazio dei nomi globale.


3

In (l'attuale) IPython 3.2.0 (Python 2 o 3)

Apri il file di configurazione all'interno della cartella nascosta .ipython

~/.ipython/profile_default/ipython_kernel_config.py

aggiungi la riga seguente

c.IPKernelApp.matplotlib = 'inline'

aggiungilo subito dopo

c = get_config()

2

Oltre a @Kyle Kelley e @DGrady, ecco la voce che può essere trovata nel

$HOME/.ipython/profile_default/ipython_kernel_config.py (o qualunque profilo tu abbia creato)

Modificare

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

per

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

Questo funzionerà in entrambe le sessioni di ipython qtconsole e notebook.


2

Crea qualsiasi .pyfile in ~/.ipython/profile_default/startup/contenente

get_ipython().magic('matplotlib inline')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.