linux - programa - Cómo ejecutar scripts R en servidores sin X11
script linux ejemplos (2)
Respondí a esto una vez antes: no puedo hacer que un programa que espera que X11 se olvide, pero puedes usar el framebuffer virtual para "fingir" que X11 está presente.
Así que vea esta antigua pregunta de SO para obtener más detalles y un ejemplo.
Quiero ejecutar scripts R y guardar los gráficos usando png()
. X11 no es compatible con los servidores Unix y aparece el siguiente mensaje de error:
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
Configurando variables de entorno
Sys.setenv("DISPLAY"=":0.0")
o
Sys.setenv("DISPLAY"=":0")
En los scripts R no se solucionó el problema.
Este ejemplo de código produce el error anterior:
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()
El resultado de las capabilities()
es:
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
Estoy ejecutando los scripts a través de un motor de rejilla solar.
Si está usando R 3.0, pruebe las options(bitmapType=''cairo'')
que funcionó para mí