在IPython Notebook中自动内联运行%matplotlib


91

每次启动IPython Notebook时,我运行的第一个命令是

%matplotlib inline

有什么方法可以更改配置文件,以便在启动IPython时自动处于此模式?


1
'ipython -pylab'是否有效?
克里斯·

如果是这样,您可以为ipython加上别名以使其轻松完成。
克里斯·

5
ipython --matplotlib更好
tacaswell 2014年

请忽略赏金。所选答案确实适用于5.5.0。在规定的24小时后,我将关闭赏金。对于那个很抱歉!
里卡多·克鲁兹

我敢打赌,您花了更多时间键入此问题并尝试实施解决方案,而不仅仅是将其粘贴到笔记本的开头:D
Intelligent-Infrastructure

Answers:


82

配置方式

IPython的配置文件位于~/.ipython/profile_*。默认配置文件称为profile_default。在此文件夹中,有两个主要配置文件:

  • ipython_config.py
  • ipython_kernel_config.py

将matplotlib的内联选项添加到ipython_kernel_config.py

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

matplotlib与pylab

不鼓励使用%pylabinline进行绘图。

它将各种不需要的杂项引入您的名称空间。

%matplotlib另一方面,无需插入名称空间即可启用内联绘图。您需要进行显式调用才能导入matplotlib和numpy。

import matplotlib.pyplot as plt
import numpy as np

您现在拥有可重现的代码,应该完全克服显式输入导入的低价格。


2
谢谢。我实际上已经在matplotlib文档中看到了此配置选项,但是不确定是否设置了matplotlib后端(一旦您手动调用%matplotlib该后端便会生效)或者是否设置了默认后端并自动将其设置为可立即用于iPython环境。
2014年

3
要添加到@Kyle Kelley关于matplotlibvs 的编辑中pylab,iPython使每次使用Profiles启动时自动执行任意python代码变得非常容易。我相信在个人资料中自动进行类似的导入操作是很常见的import numpy as np; import pandas as pd; import matplotlib.pyplot as plt。NB:pylab并不相同pyplot。我一定花了一个月才意识到这一点。
2014年

3
这(以及SillyBear的答案)停止了与IPython 3的配合使用。github.com/ipython/docker-notebook/pull/7#issuecomment- 54729770建议使用“ c.IPKernel.matplotlib” ...这两种方法都不起作用。
Pietro Battiston,2015年

3
这个答案对我有用。在IPython 3中,显然有一个新的配置文件ipython_kernel_config.py,其中包含此选项。新建一个配置文件(ipython profile create test)以获取默认设置。
DGrady 2015年

3
该选项似乎已重命名为c.InteractiveShellApp.matplotlib = "inline"
tiago

6

我认为您可能想要从命令行运行以下命令:

ipython notebook --matplotlib=inline

如果您不想每次都在cmd行上键入它,则可以创建一个别名来替您完成。


1
请更改您的帖子,--matplotlib inline并删除--pylab内容。请参阅此有关ipython开发的原因:carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob,

1
关于的注意事项matplotlib=inline:无论您是否要使用matplotlib,它都会减慢您启动的每个内核的速度。
凯尔·凯利

7
这不再起作用(至少从IPython 4开始)。命令行选项--matplotlib或被--pylab忽略。
tiago

1
Jupyter命令行帮助的帮助说这些选项已禁用,应使用%pylab%matplotlib代替。
Cas

4

Jupyter 5.X通过添加以下代码,此设置已被禁用

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)

在以前的版本中,它主要是警告。但这不是一个大问题,因为Jupyter使用的概念,kernels您可以通过运行以下命令来找到项目的内核

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

这给了我内核文件夹的路径。现在,如果我打开/Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json文件,我会看到类似下面的内容

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

这样您就可以看到执行了什么命令来启动内核。因此,如果您运行以下命令

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

所以现在如果我们将kernel.json文件更新为

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

如果我运行jupyter notebook图表,则会自动inline

自动内联

请注意,下面的方法仍然有效,您可以在以下路径中创建文件

〜/ .ipython / profile_default / ipython_kernel_config.py

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

但是这种方法的缺点是,这对于使用python的每个环境都是全球性的影响。如果您希望通过单个更改在整个环境中具有共同的行为,则也可以认为这是一种优势。

因此,请根据您的需求选择要使用的方法


3

ipython_config.py文件中,搜索以下几行

# c.InteractiveShellApp.matplotlib = None

# c.InteractiveShellApp.pylab = None

并取消注释。然后,更改None为您正在使用的后端(我使用'qt4')并保存文件。重新启动IPython,并应加载matplotlib和pylab-您可以使用该dir()命令来验证全局命名空间中的模块。


3

在(当前)IPython 3.2.0(Python 2或3)中

打开隐藏文件夹.ipython中的配置文件

~/.ipython/profile_default/ipython_kernel_config.py

添加以下行

c.IPKernelApp.matplotlib = 'inline'

之后直接添加

c = get_config()

2

除了@Kyle Kelley和@DGrady,以下是可以在

$HOME/.ipython/profile_default/ipython_kernel_config.py (或您创建的任何个人资料)

更改

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

然后,这将在ipython qtconsole和Notebook会话中都起作用。


2

创建包含的任何.py文件~/.ipython/profile_default/startup/

get_ipython().magic('matplotlib inline')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.