iPython Notebook svg默认情况下的数字

时间:2013-07-10 22:36:59

标签: ipython-notebook

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

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

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

2 个答案:

答案 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更容易,如果需要,只需使用xlimylim命令手动放大。

另外,你一定要调整行c.InlineBackend.rc来为图形大小和使用的字体设置更合理的默认值。

修改

目前推荐的最佳做法不是使用pylab,而是明确导入matplotlibnumpy,所以我修改了我的答案以停止鼓励这一点。请参阅此帖子了解原因:

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

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