我刚开始使用ipython,并且正在创建如下图:
fig, axes = plt.subplots()
xs = range(0,100)
axes.plot(xs, [x*x for x in xs], 'r')
我知道这些数字可以呈现为svg,请参见here。不幸的是,这些图总是被渲染成光栅图像。当我使用笔记本的缩放功能时,光栅化的图像变得非常难看。有没有一种方法可以更改此行为,从而默认情况下将数字显示为svg?
最佳答案
您可以在ipython配置文件配置文件中更改默认图形格式。我所做的是使用以下命令为笔记本服务器创建了一个配置文件:
ipython profile create nbserver
在命令行。这会在
~/.ipython/profile_nbserver
下创建一堆文件,其中几乎包含您可能要更改的每个设置的示例行(取决于操作系统,它可能位于~/.config/ipython
之类的位置,而不是确定它在Windows下的位置)。您需要查看文件ipython_notebook_config.py
。然后,您应该添加以下行:c.InlineBackend.figure_formats = ['svg']
请注意,这仅适用于IPython 3.x,并且您还可以根据@HarrySchreiner的注释指定其他格式。对于IPython 2.x,您应该设置
c.InlineBackEnd.figure_format='svg'
。要使用此配置文件,您应该使用以下命令启动笔记本ipython notebook --profile=nbserver
如果这很麻烦,请在运行
create
时不要提供配置文件名称,而是修改默认配置文件。另外,您可能需要排队
c.IPKernelApp.matplotlib = 'inline'
这样每个笔记本将自动从使用的matplotlib内联后端开始。
最初我也想使用svg后端而不是png来启用缩放等。但是,我发现某些图,例如带有大量点的
pcolor
,只会在使用svg后端时杀死我的浏览器。因此,我发现使用png更容易,并且如果需要,可以使用xlim
和ylim
命令手动放大。另外,您绝对应该调整
c.InlineBackend.rc
行,以为图形尺寸和所使用的字体设置更合理的默认值。编辑
当前推荐的最佳实践不是使用
pylab
,而是显式地导入matplotlib
和numpy
,因此我修改了答案以不再鼓励这样做。请参阅此帖子,了解以下原因:http://carreau.github.io/posts/10-No-PyLab-Thanks.html
另外,如果对于特定的绘图元素(例如
pcolor
或plot_surface
),svg渲染太慢,则可以将rasterized=True
选项传递给这些绘图命令。这意味着图的那些特定部分将具有基于像素的快速渲染,但是所有其他图元素将被很好地矢量化。
关于ipython-notebook - 默认情况下,iPython Notebook svg数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17582137/