我想运行R脚本并使用png()
保存图。 Unix服务器上不支持X11,我得到以下错误信息:
Error in X11(paste("png::", filename, sep = ""), g$width, g$height, pointsize, : unable to start device PNG Calls: png In addition: Warning message: In png("test.png", width = 900, height = 400) : unable to open connection to X11 display '' Execution halted
设置环境variables
Sys.setenv("DISPLAY"=":0.0")
要么
Sys.setenv("DISPLAY"=":0")
在R脚本没有解决问题。
此代码示例产生上面的错误:
library(ggplot2) library(grid) # Some data df = data.frame(x = c(1.2,5,3,5.3,2,9,4,6,8,0), y = c(1.5,6,2.5,5.1,2.3,8.7,4.1,6,8,0)) # Base plot p <- ggplot(df, aes(x,y)) + geom_point() + scale_x_continuous(limits = c(0, 8), expand = c(0,0)) + scale_y_continuous(limits = c(0, 8), expand = c(0,0)) + geom_smooth(method="lm", se=FALSE, formula=y~x, aes(colour="2"), show_guide=TRUE, fill=NA, size=1.2) + geom_vline(xintercept = 3) + geom_vline(xintercept = 7) + opts(plot.margin = unit(c(1,1,4,1), "lines")) # Create the text Grobs Text1 = textGrob("Part 1") Text2 = textGrob("Part 2") Text3 = textGrob("Part 3") # Add the annotations # Segment 1 p1 = p + annotation_custom(grob = linesGrob(), xmin = 0, xmax = 0, ymin = -1, ymax = -.75) + annotation_custom(grob = linesGrob(), xmin = 0, xmax = 3, ymin = -1, ymax = -1) + annotation_custom(grob = linesGrob(), xmin = 3, xmax = 3, ymin = -1, ymax = -.75) + annotation_custom(grob = Text1, xmin = 0, xmax = 3, ymin = -1.25, ymax = -1.25) # Segment 2 p1 = p1 + annotation_custom(grob = linesGrob(), xmin = 3, xmax = 7, ymin = -1, ymax = -1) + annotation_custom(grob = linesGrob(), xmin = 7, xmax = 7, ymin = -1, ymax = -.75) + annotation_custom(grob = Text2, xmin = 3, xmax = 7, ymin = -1.25, ymax = -1.25) # Segment 3 p1 = p1 + annotation_custom(grob = linesGrob(), xmin = 7, xmax = 8, ymin = -1, ymax = -1) + annotation_custom(grob = linesGrob(), xmin = 8, xmax = 8, ymin = -1, ymax = -.75) + annotation_custom(grob = Text3, xmin = 7, xmax = 8, ymin = -1.25, ymax = -1.25) png("test.png", width=900, height=400) # Code to override clipping gt <- ggplot_gtable(ggplot_build(p1)) gt$layout$clip[gt$layout$name=="panel"] <- "off" grid.draw(gt) dev.off()
capabilities()
的结果是:
jpeg png tiff tcltk X11 aqua http/ftp sockets FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE libxml fifo cledit iconv NLS profmem cairo TRUE TRUE FALSE TRUE TRUE FALSE FALSE
我正在通过太阳格引擎运行脚本。
我之前回答过这个问题 – 不能制作一个预计X11肯定会忘记的程序,但是您可以使用虚拟帧缓存来“假装”X11存在。
所以看到这个老的SO问题的细节和一个例子。
如果您使用的是R 3.0,请尝试options(bitmapType='cairo')
它为我工作