2010-11-24 11 views
9

मैं एक पहलू ggplot2 प्लॉट को सहेज रहा हूं जो छोटे आकार में सहेजने के लिए ठीक काम करता है, लेकिन जब मैं इसे बढ़ाना चाहता हूं तो विफल रहता है।बड़े आकार के साथ ggsave png त्रुटि

> 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 

मैंने ggsave के साथ पहले इस आकार के पीएनजी को सहेजा है, कोई विचार क्यों नहीं काम कर रहा है?

प्रतिलिपि प्रस्तुत करने योग्य उदाहरण:

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

यदि आप आर को पुनरारंभ करते हैं तो यह मदद करता है? फ़ाइल नाम को '/ /mpmp/a.png" में बदलने के बारे में कैसे? –

+0

नहीं, एक अलग नाम के तहत 'gc()', पुनरारंभ करना या सहेजना चलाना काम नहीं करता है। – James

+2

सहायता फ़ाइलों से उदाहरणों के साथ Windows Vista और R 2.11.1 पर पुन: उत्पन्न नहीं कर सकता है। आपके कंप्यूटर या ग्राफ से संबंधित एक समस्या लगता है। क्या पुनरुत्पादित उदाहरण प्राप्त करना संभव है? –

उत्तर

10

नोट: विंडोज 7 64 बिट पर आर 2.12.1 का उपयोग करना, इस समस्या को गायब हो गया है। यदि आप इस समस्या में भाग लेते हैं, तो पहले अपने आर संस्करण को अपडेट करने का प्रयास करें।

समस्या के बाद फिर से एक और सवाल में आया, मैं अपने नए सिस्टम पर अपने टेस्ट कोड को फिर से देखता हूं कि यह देखने के लिए कि क्या बग चला गया था, और यह है।


संपादित करें: चाल क्यों अंतर्निहित कोड काम कर सकता था तथ्य यह है कि यह केवल 72 dpi के एक संकल्प और नहीं 300dpi का उपयोग करता है के रूप में ggsave() में मानक मेरा मानना ​​है कि है।

तो ggsave("tst.png",height=9,width=12,dpi=72) चाल चल सकता है।

लेकिन यदि आप इसे नहीं ले सकते हैं तो आपको वास्तव में एक पागल साजिश होना चाहिए। जहां तक ​​मैं अनुमान लगा सकता हूं, समस्या ग्राफिक्स कार्ड से संबंधित है (जैसा कि this message from prof. Ripley से लिया गया है)।

यदि समाधान एक समस्या है, तो आप बेहतर ईपीएस या पीडीएफ जैसे वेक्टरीकृत प्रारूपों पर जा सकते हैं।


संपादित करें 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() के साथ प्रयास करने से एक ही त्रुटि मिलती है। ऐसा लगता है कि एक मेमोरी भरने और रिक्त नहीं होने का कुछ हिस्सा है, प्रभावी रूप से एक और पीएनजी फ़ाइल सहेजने से रोक रहा है। मेरे लिए भी gc() कोई काम नहीं किया। यहां तक ​​कि आर बंद करना और फिर से खोलना काम नहीं किया।

यह ggsave("tst.pdf") का उपयोग करके "हल" किया गया है, लेकिन बग बनी हुई है। मैं आर टीम को रिपोर्ट करूंगा।

+0

धन्यवाद जॉरीस, मैंने अभी एक उदाहरण शामिल किया है। मैं इसे 7.5x10 के लिए काम करने में कामयाब रहा और इसने लेबल को ठीक से मुद्रित करने के लिए पर्याप्त जगह की अनुमति दी। मुझे लगता है कि यह शायद एक ग्राफिक्स कार्ड मुद्दा है, लेकिन इसके लिए अभी भी थोड़ा छोटा है। – James

+0

मुझे अभी भी 2.1 2.1.2 32-बिट का उपयोग करने में समस्या आ रही है। मैं अपने कंप्यूटर को पुनरारंभ करके और केवल आर लोड करके इस मुद्दे को "हल" कर सकता हूं।मुझे संदेह है कि यह इसलिए एक तार्किक स्मृति पता स्थान मुद्दा है - यानी ओएस छवि बनाने के लिए पर्याप्त संगत स्मृति नहीं दे सकता है। – James

+0

मैंने आर 3.0.2 का उपयोग करके अपने सिस्टम पर फिर से कोशिश की, लेकिन मैं पुन: उत्पन्न करने में असफल रहा। मैं अपना कोड दोबारा चलाता हूं और मैं 38 तक पहुंचने देता हूं, जिस पर आयाम बहुत बड़े होते हैं (डिवाइस के लिए 50 इंच बहुत अधिक है)। अगर मैं अपना उदाहरण कोड दोबारा शुरू करता हूं, तो यह वही करता है: जब तक मैं 38 तक नहीं पहुंच जाता, और उसी त्रुटि से रुक जाता हूं। तो मुझे लगता है कि समस्या आर नहीं है (मैं 32 बिट भी चला रहा हूं)। –

संबंधित मुद्दे