আইপথনে প্রদর্শন ছাড়াই পাইলব.সেভফিগ কল করা হচ্ছে


111

আইপিথন নোটবুকের মধ্যে এটি প্রদর্শন না করে আমার কোনও ফাইল তৈরি করতে হবে। আমি মধ্যে পারস্পরিক কথোপকথন স্পষ্ট নই IPythonএবং matplotlib.pylabএ ব্যাপারে। তবে, আমি যখন কল করি pylab.savefig("test.png")তখন বর্তমান চিত্রটি সংরক্ষণ করা ছাড়াও প্রদর্শিত হয় test.png। প্লট ফাইলগুলির একটি বড় সেট তৈরি করতে স্বয়ংক্রিয় করার সময়, এটি প্রায়শই অনাকাঙ্ক্ষিত। বা এমন পরিস্থিতিতে যে অন্য অ্যাপ্লিকেশন দ্বারা বাহ্যিক প্রসেসিংয়ের জন্য একটি মধ্যবর্তী ফাইলটি পছন্দসই।

এটি কোনও matplotlibবা IPythonনোটবুকের প্রশ্ন কিনা তা নিশ্চিত নয় ।


@ স্ট্যাটিকফ্লোটের উত্তর আমার পক্ষে কাজ করেছে এমনকি নোটবুকের মধ্যে না থাকলেও এবং জুলিয়াল্যাংয়ের মাধ্যমে ম্যাটপ্ল্লোব ব্যবহার করার সময়; ব্যবহারioff
ভাস

উত্তর:


173

এটি একটি ম্যাটপ্ল্লোলিব প্রশ্ন, এবং আপনি ব্যাকএন্ড ব্যবহার করে এটি পেতে পারেন যা ব্যবহারকারীর কাছে প্রদর্শিত হয় না, যেমন 'অ্যাগ':

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

plt.plot([1,2,3])
plt.savefig('/tmp/test.png')

সম্পাদনা: আপনি যদি প্লট প্রদর্শনের ক্ষমতা হারাতে না চান, ইন্টারেক্টিভ মোডটি বন্ধ করুন , এবং plt.show()আপনি যখন প্লটগুলি প্রদর্শনের জন্য প্রস্তুত হন কেবল তখনই কল করুন :

import matplotlib.pyplot as plt

# Turn interactive plotting off
plt.ioff()

# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('/tmp/test0.png')
plt.close(fig)

# Create a new figure, plot into it, then don't close it so it does get displayed
plt.figure()
plt.plot([1,3,2])
plt.savefig('/tmp/test1.png')

# Display all "open" (non-closed) figures
plt.show()

2
ঠিক আছে - তবে আমি আইপিথনের মধ্যে সাধারণত ইনলাইন প্লটটি ধরে রাখতে চাই। আপনি যা পরামর্শ দেন তা যদি ব্যাকএন্ডে সম্পূর্ণ স্যুইচ করে তবে ঠিকঠাক কাজ করে। প্রশ্নটি হল আপনি কীভাবে পরিসংখ্যান সাশ্রয় করার ব্যতিক্রমী ক্ষেত্রে (ইনলাইন না দেখিয়ে) ইনলাইন প্লট করার সাধারণ পরিস্থিতির জন্য অনুমতি দিচ্ছেন allow আপনার পরামর্শের সাথে, আমি মডিউলগুলি পুনরায় লোড করার চেষ্টা করেছি এবং অস্থায়ীভাবে কিন্তু সফলতা ছাড়াই ব্যাকএন্ড পরিবর্তন করার চেষ্টা করেছি। আইপিথন নোটবুক সেশনের মধ্যে কীভাবে সাময়িকভাবে ব্যাকএন্ড পরিবর্তন করা যায় সে সম্পর্কে কোনও ধারণা?
tnt

1
আমি ইন্টারেক্টিভ প্লটিং close()এবং show()কমান্ডগুলি সম্পর্কে কথা বলতে প্রশ্নটি আপডেট করেছি যা আপনার সমস্যার সমাধান করতে পারে। ফ্লাইতে ব্যাকএন্ডগুলি পরিবর্তন করা সমর্থিত নয়, যেমন আপনি আবিষ্কার করেছেন।
স্ট্যাটিকফ্লোট

3
চমৎকার প্রতিক্রিয়ার জন্য আপনাকে ধন্যবাদ। দেখে মনে হচ্ছে যে plt.close (ডুমুর) আমার প্রয়োজনের জন্য মূল কমান্ড। আইওফের বিষয়ে আমি এখনও পরিষ্কার নই কারণ এটি অপারেশনে প্রভাব ফেলবে বলে মনে হচ্ছে না; তবে, আমি সম্ভবত কিছু মিস করছি। আবার ধন্যবাদ.
tnt

1
আমার দেওয়া রেসিপিটি একটি সাধারণ; আপনি যদি আইপথন নোটবুকটিতে কাজ না করে থাকেন তবে plt.ioff () স্ক্রিনটি জ্বলজ্বল করা বা বন্ধ করা থেকে ফিগারগুলি বন্ধ করা গুরুত্বপূর্ণ, যেমন plt.plot()ইন্টারেক্টিভ মোড চালু থাকলে আপনি কল করার সাথে সাথে কমান্ড-লাইন আইপথনের চিত্রগুলি প্লট করা হবে । ইন্টারেক্টিভ মোডটি বন্ধ করা অবধি কোনও প্লটের প্রদর্শনে বিলম্ব করে plt.show()। যেহেতু আপনি আইপথন নোটবুক ব্যবহার করছেন, ইন্টারেক্টিভ মোডটি অন্যরকম আচরণ করা হয়।
স্ট্যাটিকফ্লোট

আমার জন্য, matplotlib.use('Agg')একা চালাকি করেছিলেন। আমার কোনও কোড plt.show()বা plt.ioff()আমার কোডের মোটেই দরকার ছিল না ।
ঝাঁভেন চেন

67

আমাদের দরকার নেই plt.ioff()বা plt.show()(যদি আমরা ব্যবহার করি %matplotlib inline)। আপনি ছাড়াই কোড উপরে পরীক্ষা করতে পারেন plt.ioff()plt.close()অপরিহার্য ভূমিকা আছে। আর একবার চেষ্টা কর:

%matplotlib inline
import pylab as plt

# It doesn't matter you add line below. You can even replace it by 'plt.ion()', but you will see no changes.
## plt.ioff()

# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('test0.png')
plt.close(fig)

# Create a new figure, plot into it, then don't close it so it does get displayed
fig2 = plt.figure()
plt.plot([1,3,2])
plt.savefig('test1.png')

আপনি যদি আইপিথনে এই কোডটি চালনা করেন তবে এটি দ্বিতীয় চক্রান্ত প্রদর্শন করবে এবং আপনি যদি plt.close(fig2)এটির শেষে যুক্ত করেন তবে আপনি কিছুই দেখতে পাবেন না।

উপসংহারে, আপনি যদি চিত্রটি বন্ধ করেন তবে plt.close(fig)এটি প্রদর্শিত হবে না।


5
এর চেয়ে ভাল সমাধান! আমি একটি লুপে অনেক প্লট উত্পন্ন এবং সংরক্ষণ করি। সঙ্গে plt.ioffআমি পেতে RuntimeWarning: More than 20 figures have been opened...plt.closeএটি সমাধান করুন।
নাগাসাকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.