ggsave png ошибка с большим размером - PullRequest
9 голосов
/ 24 ноября 2010

Я сохраняю граненый график ggplot2, который прекрасно работает для сохранения в меньшем размере, но не удается, когда я хочу увеличить его.

> ggsave("tst.png",height=6.75,width=9)
# works fine

> ggsave("tst.png",height=9,width=12)
Error in grDevices::png(..., width = width, height = height, res = dpi,  : 
  unable to start device
In addition: Warning messages:
1: In grDevices::png(..., width = width, height = height, res = dpi,  :
  Unable to allocate bitmap
2: In grDevices::png(..., width = width, height = height, res = dpi,  :
  opening device failed

Я сохранил pngs такого размера раньше с помощью ggsave, есть идеи, почему он не работает?

Воспроизводимый пример:

library(car)
qplot(education,data=Vocab,geom="density",colour=sex)+facet_wrap(~year)

1 Ответ

11 голосов
/ 25 ноября 2010

ПРИМЕЧАНИЕ. При использовании R 2.12.1 в Windows 7 64bit эта проблема исчезла.Если вы столкнулись с этой проблемой, сначала попробуйте обновить версию R.

После того, как проблема снова возникла в другом вопросе, я повторно проверяю свой тестовый код на моей новой системе, чтобы проверить, устранена ли ошибка,и это так.


РЕДАКТИРОВАТЬ: хитрость, почему базовый код может работать, заключается в том, что он использует разрешение только 72 точек на дюйм, а не 300 точек на дюйм, как стандарт в ggsave() Я считаю.

так что ggsave("tst.png",height=9,width=12,dpi=72) мог бы добиться цели.

Но у вас действительно должен быть сумасшедший заговор, если он не может его взять.Насколько я могу догадаться, проблема связана с видеокартой (как следует из этого сообщения от проф. Рипли ).

Если проблема с разрешением, вам лучше перейти на векторизованные форматы, такие как eps или pdf.


EDIT 2:

Очевидно, что где-то есть ошибка, связанная скакая-то утечка памяти может быть?Дайте следующий код:

library(car)
library(ggplot2)
qplot(education,data=Vocab,geom="density",colour=sex)+facet_wrap(~year)
setwd("G:/Temp")
i<-1
while(1){
  tryCatch(ggsave("tst.png",height=9+i,width=12+i),error=function(e) {print(i);stop(e);})
  i <- i+1
}

Это работает нормально для меня, пока я не достигну около 9, тогда я получаю ошибку, которую вы получаете.Каждая следующая попытка выполнения кода, начиная с i=1, выдает ту же ошибку.Попытка с png() и dev.off() снова выдает ту же ошибку.Похоже, что некоторая часть памяти заполняется и не очищается, что эффективно предотвращает сохранение другого png-файла.также для меня gc() ничего не сделал.Даже закрытие R и повторное открытие не сработало.

Это "решено" с помощью ggsave("tst.pdf"), но ошибка остается.Я бы доложил команде R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...