19

我刚开始使用 ipython,我正在创建如下数字:

fig, axes = plt.subplots()
xs = range(0,100)
axes.plot(xs, [x*x for x in xs], 'r')

我知道这些数字可以呈现为 svgs,请参见此处。不幸的是,这些数字总是被渲染为光栅化图像。当我使用笔记本的缩放功能时,光栅化的图像变得非常难看。有没有办法改变这种行为,例如数字默认显示为 svg?

4

2 回答 2

26

我一直在寻找的魔法:

%matplotlib inline
%config InlineBackend.figure_format = 'svg'
import matplotlib.pyplot as plt

或者,您可能仍想显示png但将图形保存到文件中:

plt.savefig(fig_filename, format='svg')
于 2015-06-01T20:16:12.810 回答
18

您可以在 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 来启用缩放等功能。但是,我发现使用 svg 后端时,某些图(例如pcolor具有大量点的图)可能会杀死我的浏览器。所以我发现使用 png 更容易,如果需要,只需使用xlimylim命令手动放大。

此外,您绝对应该调整该行c.InlineBackend.rc以为图形大小和使用的字体设置更合理的默认值。

编辑

当前推荐的最佳实践不是使用pylab,而是显式导入matplotliband numpy,因此我修改了答案以停止鼓励这样做。原因见这篇文章:

http://carreau.github.io/posts/10-No-PyLab-Thanks.html

pcolor此外,如果 svg 渲染对于特定绘图元素(例如或)来说太慢plot_surface,您可以将选项传递rasterized=True给这些绘图命令。这意味着绘图的那些特定部分将具有基于像素的快速渲染,但所有其他绘图元素将被很好地矢量化。

于 2013-07-10T23:24:13.610 回答