我经常在没有X11的Linux集群计算节点上运行jupyter IPython笔记本,没有任何问题。但是,在相同的设置上运行R内核不能很好地工作。
机器详细信息如下:
刚启动笔记本会导致内核在日志中运行第一个单元格后崩溃:
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机器上生成图形的正确方法是什么?
答案 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)