如何在没有显示的机器上运行带有内嵌图形的jupyter Rkernel笔记本?

时间:2016-06-23 19:02:48

标签: r linux x11 jupyter-notebook jupyter-irkernel

我经常在没有X11的Linux集群计算节点上运行jupyter IPython笔记本,没有任何问题。但是,在相同的设置上运行R内核不能很好地工作。

机器详细信息如下:

  • CentOS 7.2
  • R 3.3.1具有X11,png和cairo功能
  • Anaconda 4.0.0(python 2.7.11)

刚启动笔记本会导致内核在日志中运行第一个单元格后崩溃:

unable to open connection to X11 display ''

我可以通过xvfb-run jupyter notebook启动笔记本来实现它。这让我在单元格中运行R命令,但是当我尝试生成绘图时,我得到以下内容

Error in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : X11  font -adobe-helvetica-%s-%s-*-*-%d-*-*-*-*-*-*-*, face 1 at size 9 could not be loaded

我想如果我可以安装x11字体,它可以工作,但这是在集群的计算节点上,我没有管理权限来安装它们。

使用R内核配置jupyter笔记本在没有X11的linux机器上生成图形的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

我认为在没有显示硬件且没有物理输入设备的Linux机器上运行笔记本时,我发现了irkernel所需的最小配置。

在虚拟帧缓冲X服务器下运行笔记本 xvfb :

xvfb-run jupyter notebook

使用 cairo 代替X11:

# Run this in a notebook cell, or put in .Rprofile
options(bitmapType="cairo")

设置 jupyter.plot_mimetype 。 SVG看起来好多了,对我来说工作得很好。 PNG也可以:

# Run this in a notebook cell, or put in .Rprofile
# svg much clearer, but won't rescale (scrolling works though)
options(jupyter.plot_mimetypes = "image/svg+xml")
# png had some artifacts, but had the nice feature that it would
# resize when the browser window changes size
#options(jupyter.plot_mimetypes = 'image/png')
# can easily resize plots (have to re-plot) with this:
#options(repr.plot.width=14, repr.plot.height=4)