25

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

SunGridEngineを介してスクリプトを実行しています。

4

2 に答える 2

40

R 3.0を使用している場合は、options(bitmapType='cairo') それが私のために働いてみてください

于 2013-11-11T22:04:26.363 に答える
3

私は前に一度これに答えました-X11がそれを確実に忘れることを期待するプログラムを作ることはできませんが、仮想フレームバッファを使用してX11が存在するふりをすることができます。

したがって、詳細と例については、この古いSOの質問を参照してください。

于 2012-10-25T13:40:47.793 に答える