Tôi muốn chạy tập lệnh R và lưu các ô bằng cách sử dụng png()
. X11 không được hỗ trợ trên các máy chủ Unix và tôi nhận được thông báo lỗi sau:Cách chạy tập lệnh R trên máy chủ không có 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
Thiết biến môi trường
Sys.setenv("DISPLAY"=":0.0")
hoặc
Sys.setenv("DISPLAY"=":0")
trong kịch bản R không giải quyết vấn đề.
mã ví dụ này tạo ra các lỗi trên:
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()
Kết quả của capabilities()
là:
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
Tôi đang chạy các kịch bản thông qua một động cơ lưới trời.
Được R thậm chí biên soạn với sự hỗ trợ X11? Kiểm tra 'khả năng()' trên máy chủ. IIRC bạn có thể có bộ đệm khung ảo X thay vì X cho phép nó hoạt động, nhưng giả định rằng gói/phần mềm framebuffer ảo X được cài đặt trên máy chủ (trên Linux, Fedora tôi có thể cài đặt xorg-x11-server-Xvfb cho Mục đích này). Nếu thất bại, hãy tìm một thiết bị đồ họa được máy chủ của bạn hỗ trợ, vẽ đồ thị đó và truy xuất tệp rồi chuyển đổi sang PNG trên hệ thống cục bộ của bạn –
Bạn kết nối với máy chủ như thế nào? Tôi nghĩ rằng 'ssh' có một tùy chọn để bật hoặc tắt đường hầm X11. –
jpeg png tiff tcltk X11 thủy http/ftp socket FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE libxml fifo cledit iconv NLS profmem cairo TRUE FALSE TRUE TRUE TRUE FALSE FALSE –