2

我在 Windows Server 2008 R2 Amazon EC2 实例上运行 64 位 R 2.15.0。grid不产生输出。例如,以下代码应在设备窗口中生成一条对角线:

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

然而,我什么也看不见。我应该在 Windows Server 2008 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

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 回答
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 回答