Ejecute automáticamente% matplotlib en línea en IPython Notebook

91

Cada vez que ejecuto IPython Notebook, el primer comando que ejecuto es

%matplotlib inline

¿Hay alguna forma de cambiar mi archivo de configuración para que cuando inicie IPython, esté automáticamente en este modo?

8one6
fuente
1
¿Funciona 'ipython -pylab'?
Chris Arena
Si es así, puede usar el alias ipython para hacerlo con bastante facilidad.
Chris Arena
5
ipython --matplotlibes mejor
tacaswell
Por favor ignore la recompensa . La respuesta seleccionada funciona para 5.5.0. Cerraré la recompensa después del período obligatorio de 24 horas. ¡Lo siento por eso!
Ricardo Cruz
Apuesto a que pasó más tiempo escribiendo esta pregunta e intentando implementar una solución que simplemente pegándola al principio de su computadora portátil: D
Infraestructura inteligente

Respuestas:

82

La forma de configuración

IPython tiene perfiles para la configuración, ubicados en ~/.ipython/profile_*. Se llama al perfil predeterminado profile_default. Dentro de esta carpeta hay dos archivos de configuración principales:

  • ipython_config.py
  • ipython_kernel_config.py

Agregue la opción en línea para matplotlib a ipython_kernel_config.py:

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

matplotlib frente a pylab

%pylabSe desaconseja el uso de para obtener un trazado en línea .

Introduce todo tipo de suciedad en su espacio de nombres que simplemente no necesita.

%matplotlibpor otro lado, permite el trazado en línea sin inyectar su espacio de nombres. Deberá hacer llamadas explícitas para obtener matplotlib y numpy importados.

import matplotlib.pyplot as plt
import numpy as np

El pequeño precio de escribir sus importaciones explícitamente debería superarse por completo por el hecho de que ahora tiene un código reproducible.

Kyle Kelley
fuente
2
Gracias. De hecho, había visto esta opción de configuración en los documentos de matplotlib, pero no estaba seguro de si solo configuraba el backend de matplotlib que entraría en vigencia una vez que llamara manualmente%matplotlib o si ambos configuraban el backend predeterminado y lo configuraban automáticamente para su uso inmediato en el Entorno iPython.
8one6
3
Para agregar a la edición de @Kyle Kelley con respecto a matplotlibvs pylab, iPython hace que sea muy fácil ejecutar automáticamente código arbitrario de Python cada vez que inicie usando Perfiles. Creo que es bastante común tener un perfil donde automáticamente haces importaciones comunes como import numpy as np; import pandas as pd; import matplotlib.pyplot as plt, etc. NB: nopylab es lo mismo que pyplot. Me debe haber tomado un mes darme cuenta de eso.
8one6
3
Esto (así como la respuesta de SillyBear) dejó de funcionar con IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 sugiere usar "c.IPKernel.matplotlib" ... que tampoco funciona .
Pietro Battiston
3
Esta respuesta funcionó para mí. En IPython 3 aparentemente hay un nuevo archivo de configuración ipython_kernel_config.py, que contiene esta opción. Cree un nuevo perfil ( ipython profile create test) para obtener un perfil predeterminado.
DGrady
3
Esta opción parece haber sido renombrada ac.InteractiveShellApp.matplotlib = "inline"
tiago
6

Creo que lo que desea podría ser ejecutar lo siguiente desde la línea de comando:

ipython notebook --matplotlib=inline

Si no le gusta escribirlo en la línea cmd cada vez, puede crear un alias para hacerlo por usted.

SillyBear
fuente
1
Cambie su publicación a --matplotlib inliney elimine el elemento --pylab. Vea esta publicación de un desarrollo de ipython por qué: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob
1
Una nota sobre matplotlib=inline: Ralentizará cada kernel que inicie, independientemente de si desea usar matplotlib.
Kyle Kelley
7
Esto ya no funciona (al menos a partir de IPython 4). Las opciones de la línea de comandos --matplotlibo --pylabse ignoran.
tiago
1
La ayuda para la línea de comandos de Jupyter dice que estas opciones están deshabilitadas y deberían usar %pylabo en su %matplotliblugar.
Cas
4

La configuración se deshabilitó en Jupyter 5.Xy superior agregando el siguiente código

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)

Y en versiones anteriores ha sido principalmente una advertencia. Pero este no es un gran problema porque Jupyter usa conceptos dekernels y puede encontrar el kernel para su proyecto ejecutando el siguiente comando

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

Esto me da la ruta a la carpeta del kernel. Ahora si abro el/Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json archivo, veo algo como a continuación

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

Entonces puede ver qué comando se ejecuta para iniciar el kernel. Entonces, si ejecuta el siguiente comando

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

Así que ahora, si actualizamos nuestro kernel.jsonarchivo a

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

Y si ejecuto jupyter notebooklos gráficos seinline

Auto en línea

Tenga en cuenta que el enfoque a continuación también funciona, donde crea un archivo en la ruta a continuación

~ / .ipython / profile_default / ipython_kernel_config.py

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

Pero la desventaja de este enfoque es que se trata de un impacto global en todos los entornos que utilizan Python. También puede considerarlo como una ventaja si desea tener un comportamiento común en todos los entornos con un solo cambio.

Así que elija el enfoque que le gustaría utilizar en función de sus necesidades.

Tarun Lalwani
fuente
3

En su ipython_config.pyarchivo, busque las siguientes líneas

# c.InteractiveShellApp.matplotlib = None

y

# c.InteractiveShellApp.pylab = None

y descomentarlos. Luego, cambie Noneal backend que está usando (yo uso 'qt4') y guarde el archivo. Reinicie IPython y se deben cargar matplotlib y pylab; puede usar el dir()comando para verificar qué módulos están en el espacio de nombres global.

MattDMo
fuente
3

En (el actual) IPython 3.2.0 (Python 2 o 3)

Abra el archivo de configuración dentro de la carpeta oculta .ipython

~/.ipython/profile_default/ipython_kernel_config.py

agregue la siguiente línea

c.IPKernelApp.matplotlib = 'inline'

agrégalo inmediatamente después

c = get_config()
cerebro
fuente
2

Además de @Kyle Kelley y @DGrady, aquí está la entrada que se puede encontrar en el

$HOME/.ipython/profile_default/ipython_kernel_config.py (o el perfil que haya creado)

Cambio

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

a

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

Esto luego funcionará tanto en ipython qtconsole como en sesiones de notebook.

Chris Hanning
fuente
2

Cree cualquier .pyarchivo que ~/.ipython/profile_default/startup/contenga

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