डिस्क पर छवि के रूप में एक भूखंड को कैसे बचाया जाए?


304

मैं R का उपयोग करके एक सरल रैखिक प्रतिगमन की साजिश करता हूं। मैं उस छवि को PNG या JPEG के रूप में सहेजना चाहूंगा, क्या यह स्वचालित रूप से करना संभव है? (कोड के माध्यम से)

दो अलग-अलग प्रश्न हैं: सबसे पहले, मैं पहले से ही अपने मॉनिटर पर प्लॉट देख रहा हूं और मैं इसे सहेजना चाहूंगा। दूसरा, मैंने अभी तक प्लॉट नहीं बनाया है, लेकिन मैं अपने प्लॉटिंग कोड को निष्पादित करते समय सीधे डिस्क पर सहेजना चाहूंगा।


शायद इस सवाल को दो अलग-अलग परिदृश्यों के बारे में पूछने के लिए संपादित किया जाना चाहिए: पहला, आप अंतःक्रियात्मक रूप से काम कर रहे होंगे और एक अच्छा प्लॉट बनाया होगा जिसे आप बचाना चाहते हैं। या, दूसरा, आपने अभी तक किसी भी प्लॉट को नहीं देखा है और आप इसे डिस्क पर लिखे बिना सीधे डिस्क पर लिखना चाहते हैं - इससे यह समझ में आएगा कि अगर आप अपने लिए कई प्लॉट बनाने के लिए स्क्रिप्ट लिख रहे थे। मैं इसे अब संपादित करूंगा
एरॉन मैकडैड

जवाबों:


376

दो निकट-संबंधी प्रश्न हैं, और प्रत्येक के लिए एक उत्तर है।


1. मेरी स्क्रिप्ट में भविष्य में एक छवि उत्पन्न होगी, मैं इसे डिस्क पर कैसे सहेज सकता हूं?

एक भूखंड को बचाने के लिए, आपको निम्नलिखित कार्य करने होंगे:

  1. एक डिवाइस खोलें, का उपयोग करते हुए png(), bmp(), pdf()या इसी तरह
  2. अपना मॉडल प्लॉट करें
  3. डिवाइस का उपयोग बंद करें dev.off()

किसी pngफ़ाइल में प्लॉट को बचाने के लिए कुछ उदाहरण कोड :

fit <- lm(some ~ model)

png(filename="your/file/location/name.png")
plot(fit)
dev.off()

यह चित्रमय प्रारूपों के लिए (संयुक्त) मदद पेज में वर्णन किया गया ?png, ?bmp, ?jpegऔर ?tiffसाथ ही साथ के लिए अलग-अलग सहायता पेज में ?pdf

ध्यान दें कि छवि डिस्क पर अलग-अलग दिखाई दे सकती है एक ही प्लॉट पर सीधे आपकी स्क्रीन पर प्लॉट की गई है, उदाहरण के लिए यदि आपने ऑन-स्क्रीन विंडो को आकार दिया है।


ध्यान दें कि यदि आपका प्लॉट latticeया तो बना है या ggplot2आपको प्लॉट को स्पष्ट रूप से प्रिंट करना है। इस उत्तर को देखें जो इसे और अधिक विस्तार से बताता है और आर एफएक्यू से भी लिंक करता है : ggplot का qplot सोर्सिंग पर निष्पादित नहीं करता है


2. मैं वर्तमान में अपनी स्क्रीन पर एक प्लॉट देख रहा हूं और मैं इसे डिस्क के रूप में कॉपी करना चाहता हूं।

dev.print(pdf, 'filename.pdf')

यह छवि को पूरी तरह से कॉपी करना चाहिए, इंटरैक्टिव विंडो पर किए गए किसी भी आकार का सम्मान करते हुए। आप इस उत्तर के पहले भाग की तरह, pdfअन्य फ़िलिपीज़ जैसे कि बदल सकते हैं png


4
यदि आप png की तरह पथ निर्धारित नहीं करते हैं (फ़ाइल नाम = "name.png"), तो आप के साथ बचत की निर्देशिका जान सकते हैंgetwd()
JuanPablo

2
मैंने इस जवाब को एक संदर्भ शामिल करने के लिए बढ़ाया है dev.print। दो निकट-संबंधी प्रश्न हैं जो मुझे लगता है कि विभिन्न उत्तरों की आवश्यकता है। दूसरा उप-प्रश्न मूल रूप से "मैं एक छवि कैसे बचा सकता हूं जिसे मैंने पहले ही अपनी स्क्रीन पर प्लॉट किया है?"। क्षमा याचना यदि मेरा संपादन बहुत अच्छा नहीं है, तो अपने संपादन में सुधार करने के लिए स्वतंत्र महसूस करें।
एरोन मैकडैड

जब आर एक "चयन" के लिए पूछता है तो मैं यह कैसे करूं? उदाहरण के लिए अगर मैं का उपयोग m3=garchFit(~arma(3,0)+garch(1,1))और plot(m3)
जेकब

3
मैं डीपीआई के साथ आंकड़ा कैसे बचा सकता हूं = 3000
अभिषेक

2
8 वर्षों से आर का उपयोग किए बिना मैं वास्तव में अपनी स्क्रीन पर खोले गए डिव को एक फ़ाइल में सहेज सकता था। मुझे लगता है कि मुझे इसकी आवश्यकता नहीं थी ... लेकिन बहुत बहुत धन्यवाद: D
साइमन C.

82

यदि आप R में प्लॉट को देखते रहना चाहते हैं, तो एक और विकल्प उपयोग करना है dev.copy:

X11 ()
plot (x,y)

dev.copy(jpeg,filename="plot.jpg");
dev.off ();

यदि आप R में बहुत अधिक प्लॉट विंडो के अव्यवस्था तक पहुँचते हैं, graphics.off()तो प्लॉट विंडो के सभी बंद करने के लिए उपयोग करें।


2
बहुत बढ़िया जवाब! यह आपको एक्स के माध्यम से भूखंडों के साथ प्रयोग करने की अनुमति देता है, जब तक आप परिणामों से खुश नहीं होते हैं, और फिर उन्हें मौके पर बचाते हैं। यह आमतौर पर ऑपरेशन का सबसे सुविधाजनक तरीका है।
आरोन मैकडैड 14

3
dev.printबेहतर है क्योंकि यह स्क्रीन से छवि को बिल्कुल कॉपी करता है। dev.copyहर छवि को डिफ़ॉल्ट रूप से वर्गाकार करने के लिए मजबूर करता है। यह निराशाजनक है अगर आपने सब कुछ अंतःक्रियात्मक रूप से सेट किया है
हारून मैकडैड

4
मैं dev.print()आयामों को परिभाषित करने के लिए चौड़ाई और ऊंचाई मापदंडों के साथ उपयोग करता हूं । उदा dev.copy(device = png, filename = 'MyPlot.png', width = 1000, height = 500) dev.off()
स्कॉट

72

यदि आप ggplot2बचत का पसंदीदा तरीका इस्तेमाल करते हैं ggsave। सबसे पहले आपको प्लॉट करना होगा, उसके बाद आप जिस प्लॉट पर कॉल करेंगे ggsave:

ggplot(...)
ggsave("plot.png")

छवि का प्रारूप उस विस्तार से निर्धारित होता है जिसे आप फ़ाइल नाम के लिए चुनते हैं। अतिरिक्त मापदंडों को ggsave, विशेष रूप widthसे height, और पारित किया जा सकता है dpi


यह एक पाश में अच्छी तरह से काम करता है, dev.off मेरे लिए काम नहीं किया
princelySid

इसका उल्टा संगत API है और उपकरणों को चालू और बंद करने के साथ गड़बड़ करने की आवश्यकता नहीं है
qwr

समाधान के विपरीत dev, इस समाधान ने ग्राफिक डिवाइस के बिना एक वर्चुअल मशीन पर काम किया।
मिगेलमोरिन

काश आर में सभी भूखंडों के लिए इस तरह से एक शक्तिशाली, सरल, सरल दृष्टिकोण था, वैसे भी, मेरा वोट यहां जाता है।
सिलसुर

1
अभी भी लगभग 7 साल वैध हैं! धन्यवाद।
Nick

30

ऐशे ही

png('filename.png')
# make plot
dev.off()

या यह

# sometimes plots do better in vector graphics
svg('filename.svg')
# make plot
dev.off()

या यह

pdf('filename.pdf')
# make plot
dev.off()

और शायद दूसरों को भी। वे सभी सहायता पृष्ठों में एक साथ सूचीबद्ध हैं।


क्या आर के लिए फ़ाइल एक्सटेंशन को स्वचालित रूप से अनुमान लगाने का कोई तरीका है (यानी फ़ंक्शन के आधार पर)? यह फ़ाइल नाम के साथ-साथ उपयोग किए गए फ़ंक्शन को बदलने के लिए थकाऊ लगता है।
बोन्लेनफ्यूम

11

पहले सवाल के लिए, मैं dev.printअंतःक्रियात्मक रूप से काम करते समय सबसे अच्छा लगता हूं । सबसे पहले, आप अपने प्लाट को नेत्रहीन रूप से सेट करते हैं और जब आप जो देखते हैं उससे खुश होते हैं, तो आप वर्तमान प्लॉट को डिस्क पर सहेजने के लिए आर से पूछ सकते हैं।

dev.print(pdf, file="filename.pdf");

आप pdfइस तरह के अन्य स्वरूपों के साथ बदल सकते हैं png

यह इमेज को बिल्कुल वैसे ही कॉपी करेगा जैसा आप स्क्रीन पर देखते हैं। इसके साथ समस्या dev.copyयह है कि छवि अक्सर अलग होती है और खिड़की के आकार और पहलू अनुपात को याद नहीं करती है - यह प्लॉट को डिफ़ॉल्ट रूप से वर्गाकार करने के लिए मजबूर करती है।

दूसरे प्रश्न के लिए, (जैसा कि दूसरों ने पहले ही उत्तर दिया है), आपको अपने प्लॉटिंग कमांड को निष्पादित करने से पहले आउटपुट को डिस्क पर निर्देशित करना होगा

pdf('filename.pdf')
plot( yourdata )
points (some_more_data)
dev.off() # to complete the writing process and return output to your monitor

8

यदि आप R Studio http://rstudio.org/ का उपयोग करते हैं, तो आपके द्वारा पसंद किए जाने वाले किसी भी प्रारूप में प्लॉट को बचाने के लिए एक विशेष मेनू है और आपके द्वारा चुने गए किसी भी प्रस्ताव पर


4
यह कम से कम विंडोज पर R GUI में भी मौजूद है।
richiemorrisroe 12

कभी-कभी यह रहस्यमय रूप से मेरे लिए विफल हो जाता है, लेकिन एक फ़ंक्शन को कॉल करना हमेशा काम करता है
qwr

3

आप उपयोग कर एक डिवाइस को खोलते हैं png(), bmp(), pdf()आदि के रूप में द्वारा सुझाए गए Andrie (सर्वश्रेष्ठ उत्तर), भूखंडों के साथ खिड़कियां पॉप अप नहीं होंगे खुला, बस * .png, * bmp या * .pdf फ़ाइल बनाया जाएगा। यह बड़े पैमाने पर गणना में सुविधाजनक है, क्योंकि आर केवल सीमित संख्या में ग्राफिक विंडो को संभाल सकता है।

हालाँकि, यदि आप भूखंडों को देखना चाहते हैं और उन्हें सहेजना भी चाहते हैं, तो savePlot(filename, type)भूखंडों के आकर्षित होने के बाद कॉल करें और उनमें मौजूद विंडो सक्रिय है।



0

इन उत्तरों को जोड़ने के लिए, यदि आपके पास एक आर स्क्रिप्ट युक्त कॉल है जो स्क्रीन (मूल उपकरण) पर प्लॉट उत्पन्न करती है, तो इन सभी को एक पीडीएफ फाइल (एक गैर-संवादात्मक शेल के लिए डिफ़ॉल्ट डिवाइस) में सहेजा जा सकता है "Rplots.pdf टर्मिनल से R में स्क्रिप्ट को रीडायरेक्ट करके (डिफ़ॉल्ट नाम) (यह मानते हुए कि आप लिनक्स या OS X चला रहे हैं), जैसे:

R < myscript.R --no-save

इसे आवश्यकतानुसार jpg / png में बदला जा सकता है


0

कुछ मामलों में एक आधार आर प्लॉट को बचाने और प्रिंट करने दोनों के लिए चाहता है। मैंने थोड़ा समय बिताया और इस उपयोगिता समारोह के साथ आया:

x = 1:10

basesave = function(expr, filename, print=T) {
  #extension
  exten = stringr::str_match(filename, "\\.(\\w+)$")[, 2]

  switch(exten,
         png = {
           png(filename)
           eval(expr, envir = parent.frame())
           dev.off()
         },
         {stop("filetype not recognized")})


  #print?
  if (print) eval(expr, envir = parent.frame())

  invisible(NULL)
}

#plots, but doesn't save
plot(x)

#saves, but doesn't plot
png("test.png")
plot(x)
dev.off()

#both
basesave(quote(plot(x)), "test.png")

#works with pipe too
quote(plot(x)) %>% basesave("test.png")

ध्यान दें कि एक का उपयोग करना चाहिए quote, अन्यथा plot(x)कॉल वैश्विक वातावरण में चलाया NULLजाता है और पास हो जाता है basesave()


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.