Voglio eseguire gli script R e salvare i grafici utilizzando png()
. X11 non è supportato sui server Unix e ottengo il seguente messaggio di errore:Come eseguire gli script R sui server senza 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
delle variabili di ambiente
Sys.setenv("DISPLAY"=":0.0")
o
Sys.setenv("DISPLAY"=":0")
negli script di R non ha risolto il problema.
Questo esempio di codice genera l'errore precedente:
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()
Il risultato di 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
Sono in esecuzione gli script tramite un motore griglia sole.
era la R anche compilato con il supporto X11? Controlla 'capabilities()' sul server. IIRC puoi avere un X framebuffer virtuale invece di X che permetterà a questo di funzionare, ma questo presuppone che il pacchetto/software virtuale di framebuffer X sia installato sul server (su Linux, Fedora posso installare xorg-x11-server-Xvfb per questo scopo). Se fallisce, trova un dispositivo grafico supportato dal tuo server, traccia a quello e recupera il file e poi converti in PNG sul tuo sistema locale. –
Come sei connesso al server? Penso che 'ssh' abbia un'opzione per attivare o disattivare il tunneling X11. –
jpeg png tiff tcltk X11 aqua http/ftp prese FALSO FALSO FALSO VERO FALSO FALSO VERO VERO libxml FIFO cledit iconv NLS profmem cairo VERO VERO FALSO VERO VERO FALSO FALSO –