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

时间:2014-01-17 02:22:41

标签: python matplotlib ipython-notebook

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

%matplotlib inline

有没有办法改变我的配置文件,这样当我启动IPython时,它会自动进入这种模式?

7 个答案:

答案 0 :(得分:72)

配置方式

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

使用%pylab进行内联绘图是discouraged

它将各种gunk引入您不需要的命名空间。

另一方面,

%matplotlib可以在不注入命名空间的情况下实现内联绘图。你需要进行显式调用才能获得matplotlib和numpy导入。

import matplotlib.pyplot as plt
import numpy as np

现在可以通过现在具有可重复代码的事实完全克服显式输入输入的小代价。

答案 1 :(得分:6)

我认为你想要的是从命令行运行以下命令:

ipython notebook --matplotlib=inline

如果您不想每次都在cmd行输入它,那么您可以创建一个别名来为您完成。

答案 2 :(得分: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

Auto Inline

请注意,以下方法仍然有效,您可以在路径

下创建文件

<强>〜/ .ipython / profile_default / ipython_kernel_config.py

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

但这种方法的缺点是这对使用python的每个环境都是一个全局影响。如果您希望在单个更改的环境中具有共同行为,则可以将其视为优势。

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

答案 3 :(得分:3)

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

# c.InteractiveShellApp.matplotlib = None

# c.InteractiveShellApp.pylab = None

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

答案 4 :(得分:3)

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

在隐藏文件夹.ipython

中打开配置文件
~/.ipython/profile_default/ipython_kernel_config.py

添加以下行

c.IPKernelApp.matplotlib = 'inline'

后直接添加
c = get_config()

答案 5 :(得分:2)

继@Kyle Kelley和@DGrady之后,这里的条目可以在

中找到

... with open(i, 'w', newline='') as fp: writer = csv.writer(fp, delimiter = ';') writer.writerow(['Number', number]) writer.writerow(['Head','N', 'E', 'El']) row_label_map = {0:'Begin',len_x-2:'End'} for l in range(len_x): row_label = row_label_map.get(l,"") writer.writerow([row_label, coord_x[l], coord_y[l], coord_z[l]]) writer.writerow(['BeginR', 'Ok']) writer.writerow(['EndR']) (或您创建的任何个人资料)

更改

$HOME/.ipython/profile_default/ipython_kernel_config.py

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

这将适用于ipython qtconsole和笔记本会话。

答案 6 :(得分:1)

在包含以下内容的.py中创建任何~/.ipython/profile_default/startup/文件

get_ipython().magic('matplotlib inline')