Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run R scripts on servers without X11 [duplicate]

Tags:

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.

like image 641
Matthias Munz Avatar asked Oct 25 '12 11:10

Matthias Munz


2 Answers

if you are using R 3.0, try options(bitmapType='cairo') it worked for me

like image 133
svural Avatar answered Nov 18 '22 19:11

svural


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.

like image 32
Dirk Eddelbuettel Avatar answered Nov 18 '22 18:11

Dirk Eddelbuettel