我刚开始使用 ipython,我正在创建如下数字:
fig, axes = plt.subplots()
xs = range(0,100)
axes.plot(xs, [x*x for x in xs], 'r')
我知道这些数字可以呈现为 svgs,请参见此处。不幸的是,这些数字总是被渲染为光栅化图像。当我使用笔记本的缩放功能时,光栅化的图像变得非常难看。有没有办法改变这种行为,例如数字默认显示为 svg?
我刚开始使用 ipython,我正在创建如下数字:
fig, axes = plt.subplots()
xs = range(0,100)
axes.plot(xs, [x*x for x in xs], 'r')
我知道这些数字可以呈现为 svgs,请参见此处。不幸的是,这些数字总是被渲染为光栅化图像。当我使用笔记本的缩放功能时,光栅化的图像变得非常难看。有没有办法改变这种行为,例如数字默认显示为 svg?
我一直在寻找的魔法:
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
import matplotlib.pyplot as plt
或者,您可能仍想显示png
但将图形保存到文件中:
plt.savefig(fig_filename, format='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 来启用缩放等功能。但是,我发现使用 svg 后端时,某些图(例如pcolor
具有大量点的图)可能会杀死我的浏览器。所以我发现使用 png 更容易,如果需要,只需使用xlim
和ylim
命令手动放大。
此外,您绝对应该调整该行c.InlineBackend.rc
以为图形大小和使用的字体设置更合理的默认值。
编辑
当前推荐的最佳实践不是使用pylab
,而是显式导入matplotlib
and numpy
,因此我修改了答案以停止鼓励这样做。原因见这篇文章:
http://carreau.github.io/posts/10-No-PyLab-Thanks.html
pcolor
此外,如果 svg 渲染对于特定绘图元素(例如或)来说太慢plot_surface
,您可以将选项传递rasterized=True
给这些绘图命令。这意味着绘图的那些特定部分将具有基于像素的快速渲染,但所有其他绘图元素将被很好地矢量化。