I want to run R scripts and save the plots using png()
. X11 is not supported on the Unix servers and I get the following error message:
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
Setting environment variables
Sys.setenv("DISPLAY"=":0.0")
or
Sys.setenv("DISPLAY"=":0")
in the R scripts didn't solve the problem.
This code example produces the error above:
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()
The outcome of capabilities()
is:
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
I am running the scripts via a sun grid engine.
if you are using R 3.0, try options(bitmapType='cairo')
it worked for me
I answered this once before -- can cannot make a program which expects X11 to certainly forget about it, but you can use the virtual framebuffer to 'pretend' X11 is present.
So see this older SO question for details and an example.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With