2012-05-23 6 views
2

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

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

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

EDIT: Еще один воспроизводимый пример, который работает на моем доме (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

+1

Я не знаком с изображениями Windows на EC2, но при запуске экземпляров linux графическое устройство по умолчанию, как мне кажется, является pdf, что сохраняет вывод в Rplots.pdf. см. '? Устройство' и попробуйте' options («device») '. В экземплярах Linux я часто пересылаю X11 через ssh, если я хочу быть более интерактивным с графиками (хотя иногда это может быть медленным). В противном случае я буду обернуть 'pdf (file =" file1.pdf ")' и 'dev.off()' вокруг вызова 'plot()' или 'grid.draw()' и получить доступ к pdf позже через обычные средства просмотра файла изображения на удаленном сервере (sftp, ftp и т. д.). – jthetzel

+0

Делает ли сюжет (1) тем, что вы ожидаете? – mdsumner

+0

@jthetzel Обертка участка между командой сохранения и выключением просто приводит к пустому изображению. –

ответ

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

Я обнаружил, что писать Plotting команды между pdf() и dev.off() производит пустые файлы. Хранение сюжета в объекте и его вызов будут работать.

+1

вам не нужно возиться с 'panel.background', чтобы иметь фоновое изображение, особенно без линий сетки. Вместо этого вы можете просто использовать '? Annotation_raster' или'? Annotation_custom'. – baptiste

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: Вызывает ли какое-либо из вышеуказанных вопросов вашу проблему?

+0

@jhetzel Спасибо за ответ, но это не касается проблемы или не дает мне никаких подсказок по ее причине. Я добавил лучший пример к исходному вопросу. Моя фактическая цель - использовать «сетку» для рисования фона .png на графе «ggplot2».Я могу копировать код взад и вперед между моими персональными и рабочими ПК и работать с ним отлично. На EC2 я получаю часть 'ggplot2' (фактический график), но фон пуст. –

+0

@attitude_stool: Какое устройство вы используете? Пробовали ли вы использовать устройства pdf или png, а затем копировать полученный файл образа обратно на свой домашний или рабочий компьютер? Это может помочь проверить, что проблема связана с пакетом grid в экземпляре EC2, в отличие от проблемы с устройством Windows или программой просмотра PDF на EC2. – jthetzel

+0

@jhetzel Почему остальная часть графика отображалась, если устройство было проблемой? В любом случае я попробовал все устройства и получил пустой вывод для всех. –

Смежные вопросы