Executar automaticamente% matplotlib inline no IPython Notebook

91

Cada vez que eu inicio o IPython Notebook, o primeiro comando que executo é

%matplotlib inline

Existe alguma maneira de alterar meu arquivo de configuração para que, quando eu iniciar o IPython, ele esteja automaticamente neste modo?

8one6
fonte
1
O 'ipython -pylab' funciona?
Chris Arena
Nesse caso, você pode usar o apelido de ipython para fazer isso facilmente.
Chris Arena
5
ipython --matplotlibé melhor
tacaswell
Por favor, ignore a recompensa . A resposta selecionada funciona para 5.5.0. Eu fecharei a recompensa após o período obrigatório de 24 horas. Me desculpe por isso!
Ricardo Cruz
Aposto que você gastou mais tempo digitando esta questão e tentando implementar a solução do que simplesmente colando-a no início do seu notebook: D
Infraestrutura Inteligente

Respostas:

82

A forma de configuração

IPython possui perfis para configuração, localizados em ~/.ipython/profile_*. O perfil padrão é chamado profile_default. Dentro desta pasta, existem dois arquivos de configuração principais:

  • ipython_config.py
  • ipython_kernel_config.py

Adicione a opção inline para matplotlib a ipython_kernel_config.py:

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

matplotlib vs. pylab

O uso de %pylabpara obter plotagem em linha é desencorajado .

Ele introduz todos os tipos de sujeira em seu namespace que você simplesmente não precisa.

%matplotlibpor outro lado, permite a plotagem embutida sem injetar seu namespace. Você precisará fazer chamadas explícitas para importar matplotlib e numpy.

import matplotlib.pyplot as plt
import numpy as np

O pequeno preço de digitar suas importações explicitamente deve ser completamente superado pelo fato de que agora você tem código reproduzível.

Kyle Kelley
fonte
2
Obrigado. Na verdade, eu tinha visto essa opção de configuração nos documentos do matplotlib, mas não tinha certeza se ela apenas definia o back-end matplotlib que entraria em vigor quando você chamasse manualmente%matplotlib ou se ele definia o back-end padrão e automaticamente o configurava para uso imediato no ambiente iPython.
8one6 de
3
Para adicionar à edição de @Kyle Kelley em relação ao matplotlibvs pylab, o iPython torna muito fácil executar código python arbitrário automaticamente toda vez que você iniciar usando Perfis. Acredito que seja bastante comum ter um perfil onde você automaticamente faz importações comuns como import numpy as np; import pandas as pd; import matplotlib.pyplot as plt, etc. NB: nãopylab é a mesma coisa que . Devo ter levado um mês para perceber isso. pyplot
8one6 de
3
Isso (assim como a resposta de SillyBear) parou de funcionar com IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 sugere o uso de "c.IPKernel.matplotlib" ... que também não funciona .
Pietro Battiston
3
Essa resposta funcionou para mim. No IPython 3, aparentemente, há um novo arquivo de configuração,, ipython_kernel_config.pyque contém essa opção. Faça um novo perfil ( ipython profile create test) para obter um padrão.
DGrady
3
Esta opção parece ter sido renomeada parac.InteractiveShellApp.matplotlib = "inline"
tiago
6

Acho que o que você quer é executar o seguinte na linha de comando:

ipython notebook --matplotlib=inline

Se você não gosta de digitar na linha cmd todas as vezes, pode criar um alias para fazer isso por você.

SillyBear
fonte
1
Por favor, mude sua postagem para --matplotlib inlinee remova as coisas --pylab. Veja esta postagem de um devel ipython por quê: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob
1
Uma observação sobre matplotlib=inline: isso tornará cada kernel mais lento, independentemente de você querer usar matplotlib.
Kyle Kelley
7
Isso não funciona mais (pelo menos a partir do IPython 4). As opções de linha de comando --matplotlibou --pylabsão ignoradas.
tiago
1
A ajuda da linha de comando do Jupyter diz que essas opções estão desabilitadas e devem ser usadas %pylabou em %matplotlibvez disso.
Cas
4

A configuração foi desabilitada em Jupyter 5.Xe superior, adicionando o código abaixo

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 nas versões anteriores era principalmente um aviso. Mas isso não é um grande problema porque o Jupyter usa conceitos de kernelse você pode encontrar o kernel para o seu projeto executando o comando abaixo

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

Isso me dá o caminho para a pasta do kernel. Agora, se eu abrir o /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonarquivo, vejo algo como abaixo

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

Assim, você pode ver qual comando é executado para iniciar o kernel. Então, se você executar o comando abaixo

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

Agora, se atualizarmos nosso kernel.jsonarquivo para

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

E se eu executar jupyter notebookos gráficos são automaticamenteinline

Auto Inline

Observe que a abordagem abaixo também funciona, em que você cria um arquivo no caminho abaixo

~ / .ipython / profile_default / ipython_kernel_config.py

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

Mas a desvantagem dessa abordagem é que esse é um impacto global em todos os ambientes que usam Python. Você também pode considerar isso uma vantagem se quiser ter um comportamento comum entre ambientes com uma única mudança.

Portanto, escolha qual abordagem você gostaria de usar com base em seus requisitos

Tarun Lalwani
fonte
3

Em seu ipython_config.pyarquivo, pesquise as seguintes linhas

# c.InteractiveShellApp.matplotlib = None

e

# c.InteractiveShellApp.pylab = None

e descomente-os. Em seguida, mude Nonepara o back-end que você está usando (eu uso 'qt4') e salve o arquivo. Reinicie o IPython, e matplotlib e pylab devem ser carregados - você pode usar o dir()comando para verificar quais módulos estão no namespace global.

MattDMo
fonte
3

No (atual) IPython 3.2.0 (Python 2 ou 3)

Abra o arquivo de configuração dentro da pasta oculta .ipython

~/.ipython/profile_default/ipython_kernel_config.py

adicione a seguinte linha

c.IPKernelApp.matplotlib = 'inline'

adicione logo depois

c = get_config()
memebrain
fonte
2

Além de @Kyle Kelley e @DGrady, aqui está a entrada que pode ser encontrada no

$HOME/.ipython/profile_default/ipython_kernel_config.py (ou qualquer perfil que você criou)

mudança

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

para

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

Isso funcionará em sessões ipython qtconsole e notebook.

Chris Hanning
fonte
2

Crie qualquer .pyarquivo que ~/.ipython/profile_default/startup/contenha

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