Подтвердить что ты не робот

Как запускать R-скрипты на серверах без X11

Я хочу запустить R-скрипты и сохранить графики с помощью png(). X11 не поддерживается на серверах Unix, и появляется следующее сообщение об ошибке:

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

Настройка переменных окружения

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

Я запускаю скрипты с помощью механизма солнечной сетки.

4b9b3361

Ответ 1

Я ответил на это один раз раньше - can не может сделать программу, которая ожидает, что X11, конечно, забудет об этом, но вы можете использовать виртуальный фреймбуфер, чтобы "притвориться" X11 присутствует.

См. этот старый вопрос SO для получения более подробной информации и примера.

Ответ 2

если вы используете R 3.0, попробуйте options(bitmapType='cairo') это сработало для меня