2

Windows Server 2008 R2AmazonEC2インスタンスで64ビットR2.15.0を実行しています。grid出力を生成しません。たとえば、次のコードは、デバイスウィンドウに単一の対角線を生成する必要があります。

grid.newpage()
l <- linesGrob()
grid.draw(l)

しかし、私には何も見えません。グリッド出力を有効にするためにWindowsServer2008 R2で使用する必要があるフラグまたはオプションはありますか?

編集:私の家(Windows 7 x64)と仕事用PC(Windows XP)で動作する別の再現可能な例:

library(grid)
library(png)

img.path <- system.file("img", "Rlogo.png", package="png")
bg <- readPNG(img.path)
background <- rasterGrob(unclass(bg))

grid.draw(background)

これは、私の仕事用PCで見られるように、期待される出力です(以下に収まるようにサイズ変更されています)。

R-log-png

4

2 に答える 2

2

Rリモートデスクトップ接続を介してウィンドウデバイスでラスターイメージを正しく生成しません。ラスターイメージが必要な場合は、プロットを別のデバイスに出力する必要があります。

library(ggplot2)
library(grid)
library(maps)
library(mapproj)
library(png)
library(RgoogleMaps)

counties <- map_data("county", region="virginia")
states <- map_data("state")

tmp <- tempfile(fileext=".png")
bg <- GetMap.bbox(range(counties$long), range(counties$lat), destfile=tmp, 
     maptype="satellite", format="png32")
background <- readPNG(tmp)
background <- rasterGrob(unclass(background))

p <- ggplot(counties, aes(long, lat)) +
   coord_map(xlim=c(bg$BBOX$ll[2], bg$BBOX$ur[2]), 
             ylim=c(bg$BBOX$ll[1], bg$BBOX$ur[1])) +
   geom_path(aes(group=group), color="darkgrey") +
   geom_path(data=states, aes(group=group), color="white", size=1) +
   opts(axis.line=theme_blank(),
        axis.text.x=theme_blank(),
        axis.text.y=theme_blank(),
        axis.ticks=theme_blank(),
        axis.title.x=theme_blank(),
        axis.title.y=theme_blank(),
        axis.ticks.length=unit(0, "lines"),
        axis.ticks.margin=unit(0, "lines"),
        panel.border=theme_blank(),
        panel.background=function(...)background,
        panel.grid.major=theme_blank(),
        panel.grid.minor=theme_blank(),
        panel.margin=unit(0, "lines"),
        legend.position="none",
        legend.title=theme_blank(),
        legend.background=theme_blank(),
        plot.margin=unit(0*c(-1.5, -1.5, -1.5, -1.5), "lines"))

pdf("plot.pdf", height=7, width=7)
p
dev.off()

pdf()との間にプロットコマンドを書き込むとdev.off()、空白のファイルが生成されることがわかりました。プロットをオブジェクトに保存して呼び出すと機能します。

于 2012-05-26T21:15:35.807 に答える
2

dev.list()を呼び出して、開いているグラフィックス デバイスの名前付きベクトルを返すことができます。たとえば、Windows では次のようになります。

windows()
pdf()
dev.list()
# windows     pdf 
#       2       3 
dev.off(); dev.off()
dev.list()
# NULL

現在アクティブdev.cur()なデバイスを返します。開いているデバイスがない場合は、開くことができます。

windows()
grid.newpage()
l <- linesGrob()
grid.draw(l)

PDF の場合、必ずデバイスを閉じる必要があります。そうしないと、PDF ファイルがレンダリングされません。

pdf() # plot saved by default to Rplots.pdf
grid.newpage()
l <- linesGrob()
grid.draw(l)
dev.off() 

?deviceヘルプ ページには、その他のグラフィックス デバイスがリストされています。通常、grid.newpage()何も開いていない場合、 への呼び出しは新しいデバイスを自動的に開きますが、おそらくあなたの場合はそうではありません。上記の例は、Windows 7 x64 および Ubuntu 11.10 x64 で動作します。

@attitude_stool: 上記のいずれかが問題の特定に役立ちますか?

于 2012-05-24T13:23:05.127 に答える