ডিস্কে চিত্র হিসাবে একটি প্লট কীভাবে সংরক্ষণ করবেন?


304

আমি আর ব্যবহার করে একটি সাধারণ লিনিয়ার রিগ্রেশন প্লট করি plot (কোডের মাধ্যমে)

দুটি পৃথক প্রশ্ন রয়েছে: প্রথমত, আমি ইতিমধ্যে আমার মনিটরের প্লটটি দেখছি এবং আমি এটি এটি সংরক্ষণ করতে চাই। দ্বিতীয়ত, আমি এখনও প্লটটি তৈরি করতে পারি নি, তবে আমার প্লটিং কোডটি সম্পাদন করার সময় আমি সরাসরি এটি ডিস্কে সংরক্ষণ করতে চাই।


দুটি পৃথক পরিস্থিতি সম্পর্কে জিজ্ঞাসা করার জন্য সম্ভবত এই প্রশ্নটি সম্পাদনা করা উচিত: প্রথমত, আপনি شايد ইন্টারেক্টিভভাবে কাজ করছেন এবং একটি দুর্দান্ত প্লট তৈরি করেছেন যা আপনি সংরক্ষণ করতে চান। অথবা, দ্বিতীয়, আপনি এখনও কোনও প্লট দেখেননি এবং আপনি এটি প্রথমে না দেখে সরাসরি ডিস্কে লিখতে চান - আপনি যদি আপনার জন্য অনেক প্লট তৈরি করতে কোনও স্ক্রিপ্ট লিখতেন তবে এটির অর্থ হবে। আমি এখনই এটি সম্পাদনা করব
অ্যারন ম্যাকডেইড

উত্তর:


376

দুটি ঘনিষ্ঠভাবে সম্পর্কিত প্রশ্ন, এবং প্রতিটি জন্য একটি উত্তর আছে।


১. আমার স্ক্রিপ্টে ভবিষ্যতে একটি চিত্র উত্পন্ন হবে, আমি কীভাবে এটি ডিস্কে সংরক্ষণ করব?

একটি প্লট সংরক্ষণ করতে, আপনাকে নিম্নলিখিতগুলি করতে হবে:

  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

তবে নোট করুন যে চিত্রটি আপনার স্ক্রিনে সরাসরি প্লট করা একই প্লটের ডিস্কে আলাদা দেখতে পারে, উদাহরণস্বরূপ যদি আপনি অন-স্ক্রিন উইন্ডোটিকে পুনরায় আকার দিয়েছেন have


মনে রাখবেন যে আপনার প্লটটি যদি হয় হয় latticeবা ggplot2আপনাকে স্পষ্টভাবে প্লটটি মুদ্রণ করতে হয়। এই উত্তরটি দেখুন যা এটি আরও বিস্তারিতভাবে ব্যাখ্যা করে এবং আর এফএকিউ সম্পর্কিত লিঙ্কগুলি: ggplot এর qplot সোর্সিংয়ের ক্ষেত্রে কার্যকর করে না


২. আমি বর্তমানে আমার পর্দার একটি প্লট খুঁজছি এবং আমি এটি ডিস্কে 'যেমন আছে' তে অনুলিপি করতে চাই।

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

ইন্টারেক্টিভ উইন্ডোটিতে আপনি যে কোনও আকার পরিবর্তন করেছেন তা সম্মানের সাথে এটি চিত্রটিকে পুরোপুরি অনুলিপি করা উচিত। আপনি এই উত্তরটির প্রথম অংশের pdfমতোই অন্যান্য ফাইল টাইপের সাথে প্রতিস্থাপন করতে পারেন png


4
আপনি যদি পথটি সেট না করেন, যেমন পিএনজি (ফাইলের নাম = "নাম.png"), আপনি সংরক্ষণের ডিরেক্টরিটি জানতে পারবেনgetwd()
জুয়ানপাবলো

2
একটি রেফারেন্স অন্তর্ভুক্ত করার জন্য আমি এই উত্তরটি প্রসারিত করেছি dev.print। দুটি ঘনিষ্ঠভাবে সম্পর্কিত প্রশ্ন রয়েছে যা আমার মনে হয় বিভিন্ন উত্তর প্রয়োজন। দ্বিতীয় উপ-প্রশ্নটি মূলত "আমি কীভাবে এমন একটি চিত্র সংরক্ষণ করব যা আমি ইতিমধ্যে আমার স্ক্রিনে প্লট করেছি?"। দুঃখিত যদি আমার সম্পাদনা খুব ভাল না হয় তবে আমার সম্পাদনাগুলি উন্নত করতে দ্বিধা বোধ করবেন।
অ্যারন ম্যাকডেইড

আর যখন একটি "নির্বাচন" জিজ্ঞাসা করবে তখন আমি কীভাবে এটি করব? উদাহরণস্বরূপ যদি আমি m3=garchFit(~arma(3,0)+garch(1,1))এবং ব্যবহার করি plot(m3)
জ্যাকব

3
আমি কীভাবে ডিপিআই = 3000 দিয়ে চিত্রটি সংরক্ষণ করতে পারি
অভিষেক 12

2
8 বছর আর না জেনে আর ব্যবহার করে আমি আসলে আমার স্ক্রিনে খোলা ডেভ কোনও ফাইলের মধ্যে সংরক্ষণ করতে পারি। আমার ধারণা আমার এটির দরকার নেই ... তবে অনেক অনেক ধন্যবাদ: ডি
সাইমন সি

82

আপনি যদি প্লটে প্লটটি দেখতে দেখতে চান তবে অন্য একটি বিকল্পটি হ'ল dev.copy:

X11 ()
plot (x,y)

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

আপনি যদি আর এর মধ্যে অনেকগুলি প্লট উইন্ডোর একটি গোলমাল পৌঁছে থাকেন graphics.off()তবে প্লটের সমস্ত উইন্ডো বন্ধ করতে ব্যবহার করুন ।


2
দুর্দান্ত উত্তর! এটি আপনাকে এক্স এর মাধ্যমে প্লটগুলির সাথে পরীক্ষার অনুমতি দেয়, যতক্ষণ না আপনি ফলাফল নিয়ে খুশি হন, এবং তারপরে সেগুলিকে সেভ করে। এটি সাধারণত পরিচালনার সবচেয়ে সুবিধাজনক মোড।
অ্যারন ম্যাকডেইড

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, এই সমাধানটি গ্রাফিক ডিভাইসগুলি ছাড়া ভার্চুয়াল মেশিনে কাজ করেছিল।
মাইগুয়েলমোরিন

আমি আশা করি আর এর সমস্ত প্লটগুলির জন্য এই জাতীয় কোনও শক্তিশালী, তবুও সহজ উপায় ছিল Any যাইহোক, আমার ভোট এখানে চলে।
সিলসুর

1
এখনও প্রায় 7 বছর বৈধ! ধন্যবাদ.
নিক

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

এবং সম্ভবত অন্যরাও। তারা সকলেই সহায়তা পৃষ্ঠাগুলিতে এক সাথে তালিকাভুক্ত।


আর ফাইলের এক্সটেনশানটি স্বয়ংক্রিয়ভাবে অনুমান করার কোনও উপায় আছে (অর্থাত ফাংশনের উপর ভিত্তি করে)? ফাইলের নাম ব্যবহারের সাথে সাথে ব্যবহৃত ফাংশনটিও বদলে নেওয়া ক্লান্তিকর বলে মনে হচ্ছে।
Bonlenfum

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

আপনি যদি আর স্টুডিও http://rstudio.org/ ব্যবহার করেন তবে আপনার পছন্দ মতো যে কোনও ফর্ম্যাট এবং যে কোনও রেজোলিউশনে আপনার প্লটটি সংরক্ষণ করার জন্য একটি বিশেষ মেনু রয়েছে


4
এটি উইন্ডোজের আর জিইআইতে অন্তত বিদ্যমান exists
richiemorrisroe

কখনও কখনও এটি রহস্যজনকভাবে আমার জন্য ব্যর্থ হয়, তবে কোনও ফাংশন কল করা সবসময় কাজ করে
qwr

3

আপনি ব্যবহার একটি ডিভাইস খোলেন তাহলে png(), bmp(), pdf()ইত্যাদি দ্বারা প্রস্তাবিত Andrie (সর্বোত্তম উত্তর), প্লট সহ Windows পপ আপ করা হবে না খোলা, শুধু * .png, * BMP অথবা * .pdf ফাইল তৈরি করা হবে। এটি বিশাল গণনাগুলিতে সুবিধাজনক, যেহেতু আর কেবলমাত্র সীমিত সংখ্যক গ্রাফিক উইন্ডো পরিচালনা করতে পারে।

তবে, আপনি যদি প্লটগুলি দেখতে চান এবং সেগুলিও সংরক্ষণ করতে চান savePlot(filename, type), প্লটগুলি আঁকার পরে সেগুলিযুক্ত উইন্ডোটি সক্রিয় হওয়ার পরে কল করুন।



0

এই উত্তরগুলিতে যোগ করার জন্য, যদি আপনার কাছে একটি স্ক্রিপ্ট থাকে যা কলগুলি ধারণ করে যা স্ক্রিনে প্লট উত্পন্ন করে (নেটিভ ডিভাইস), তবে এগুলি সমস্ত পিডিএফ ফাইলে সংরক্ষণ করা যায় (একটি ইন্টারেক্টিভ শেলের জন্য ডিফল্ট ডিভাইস) "Rplots.pdf "(ডিফল্ট নাম) টার্মিনাল থেকে স্ক্রিপ্টটি পুনর্নির্দেশের মাধ্যমে (ধরে নিবেন আপনি লিনাক্স বা ওএস এক্স চালাচ্ছেন), যেমন:

R < myscript.R --no-save

এটি প্রয়োজনীয় হিসাবে জেপিজি / পিএনজিতে রূপান্তরিত হতে পারে


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


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.