Сетка R базового пакета не производит вывод

Я использую 64-разрядную версию R 2.15.0 на экземпляре Amazon EC2 в Windows Server 2008 R2.grid не производит вывод. Например, следующий код должен создать одну диагональную линию в окне устройства:

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

Я, однако, ничего не вижу. Есть ли флаг или опция, которую я должен использовать в Windows Server 2008 R2, чтобы включить вывод сетки?

РЕДАКТИРОВАТЬ: еще один воспроизводимый пример, который работает на моем доме (Windows 7 x64) и рабочих ПК (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)

Это ожидаемый результат, как видно на моем рабочем ПК (размер изменен, чтобы соответствовать ниже):

R-log-png

 attitude_stool24 мая 2012 г., 01:58
@ mdsumnerplot(1) работает как положено
 mdsumner24 мая 2012 г., 01:12
Сюжет (1) делать то, что вы ожидаете?
 attitude_stool24 мая 2012 г., 01:57
@ jthetzel Обтекание графика между командой сохранения и выключением приводит к чистому изображению.
 jthetzel23 мая 2012 г., 23:56
Я не знаком с образами Windows на EC2, но при запуске экземпляров linux графическим устройством по умолчанию, как мне кажется, является pdf, который сохраняет вывод в Rplots.pdf. видеть?Device, и попробоватьoptions("device"). В случаях с Linux я часто пересылаю X11 через ssh, если я хочу быть более интерактивным с графиками (хотя иногда это может быть медленным). В противном случае, я завернуpdf(file = "file1.pdf") а такжеdev.off() вокруг звонкаplot() илиgrid.draw() и доступ к PDF позже через обычные средства просмотра файла изображения на удаленном сервере (sftp, ftp и т. д.).
 mdsumner24 мая 2012 г., 02:16
Введите детали в д, чтобы улучшить их, в настоящее время они неполны

Ответы на вопрос(2)

Решение Вопроса

R неправильно создает растровые изображения в оконном устройстве через подключение к удаленному рабочему столу. Если требуется растровое изображение, график должен быть выведен на другое устройство.

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() создает пустые файлы. Сохранение графика в объекте и вызов его будет работать.

 baptiste26 мая 2012 г., 23:44
тебе не нужно связываться сpanel.background иметь фоновое изображение, особенно без линий сетки. Вы можете просто использовать?annotation_raster или?annotation_custom вместо.

dev.list() может вызываться для возврата именованного вектора открытых графических устройств. В Windows, например:

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

А такжеdev.cur() вернет текущее активное устройство. Если нет открытых устройств, вы можете открыть одно из них:


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() 

The?deviceа странице справки @ перечислены другие графические устройства. Обычно звонок наgrid.newpage() автоматически открывает новое устройство, если ни одно из них не открыто, но, возможно, не в вашем случае. Приведенные выше примеры работают для меня на Windows 7 x64 и Ubuntu 11.10 x64.

@ position_stool: Помогает ли что-либо из перечисленного выявить вашу проблему?

 jthetzel24 мая 2012 г., 21:17
@ position_stool: еще одна вещь: удача сprint(grid.draw(l)) ?
 attitude_stool24 мая 2012 г., 18:21
@ jhetzel Почему бы остальная часть сюжета отображалась, если проблема была в устройстве? В любом случае, я перепробовал все устройства и получил пустой вывод для всех.
 attitude_stool24 мая 2012 г., 15:35
@ jhetzel Спасибо за ответ, но это не решает проблему и не дает мне никаких подсказок по ее причине. Я добавил лучший пример к исходному вопросу. Моя настоящая цель - использоватьgrid, чтобы нарисовать .png фон дляggplot2 график. Я могу копировать код туда и обратно между моим персональным и рабочим ПК, и он будет работать идеально. На EC2 я получаюggplot2 part (фактический график), но фон пустой.
 jthetzel24 мая 2012 г., 20:15
@ position_stool: Справедливая точка зрения. Возможно, вы можете написатьsessionInfo(), хотя я не думаю, что это будет показательно. Лиgrid:::drawGrob(l) дать что-нибудь? Работает ли решетка нормально:xyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species, data = iris)
 jthetzel24 мая 2012 г., 15:42
@ position_stool: какое устройство вы используете? Вы пытались использовать устройства pdf или png, а затем копировать полученный файл изображения обратно на домашний или рабочий компьютер? Это может помочь убедиться, что проблема связана с пакетом grid в экземпляре EC2, а не с устройством Windows или средством просмотра PDF в EC2.

Ваш ответ на вопрос