我刚开始使用ipython,我正在创建如下数据:
fig, axes = plt.subplots()
xs = range(0,100)
axes.plot(xs, [x*x for x in xs], 'r')
我知道这些数字可以呈现为svgs,请参阅here。不幸的是,这些数字总是呈现为光栅化图像。当我使用笔记本的缩放功能时,光栅化的图像变得非常难看。有没有办法改变这种行为,这样数字默认显示为svg?
答案 0 :(得分:26)
我一直在寻找的魔力:
png
或者,您可能仍希望显示plt.savefig(fig_filename, format='svg')
,但将图形保存到文件中:
$('#container').highcharts({
"chart": {
"type": "bar",
"zoomType": "x"
},
"title": {
"text": ""
},
"xAxis": {
"title": {
"text": ""
},
"categories": [
"A",
"B",
"C"
]
},
"plotOptions": {
"series": {
"stacking": "percent",
"pointPadding": 0.2,
"borderWidth": 0,
"animation": false
}
},
"series": [
{
"name": "Bacon",
"data": [
36.4,
18.9,
17.5
]
},
{
"name": "Pork Chops",
"data": [
105,
93.7,
108.8
]
},
{
"name": "Ham",
"data": [
32.7,
30.7,
34.2
]
}
]
});
答案 1 :(得分:17)
您可以更改ipython配置文件配置文件中的默认数字格式。我所做的是使用以下方法为笔记本服务器创建配置文件:
ipython profile create nbserver
在命令行。这会在~/.ipython/profile_nbserver
下创建一大堆文件,这些文件几乎包含您可能想要更改的每个设置的示例行(可能是某个地方,例如~/.config/ipython
,而不是取决于您的操作系统,不确定它会在哪里在窗户下)。您需要查看文件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
此外,如果svg渲染对于特定的绘图元素(例如pcolor
或plot_surface
)来说太慢,则可以将选项rasterized=True
传递给这些绘图命令。这意味着绘图的那些特定部分将具有基于快速像素的渲染,但所有其他绘图元素将很好地矢量化。