একটি খুব উচ্চ মানের পাইথনে চিত্র সংরক্ষণ করা


109

আমি কীভাবে খুব উচ্চ মানের পাইথন প্লটগুলি সংরক্ষণ করতে পারি?

অর্থাত্, আমি যখন কোনও পিডিএফ ফাইলে সংরক্ষিত অবজেক্টটিতে জুম করে রাখি, কোনও ঝাপসা নেই?

এছাড়াও, এটি সংরক্ষণ করার জন্য সর্বোত্তম মোডটি কী হবে?

png, eps? নাকি অন্য কিছু? আমি করতে পারছি না pdfকারণ এখানে একটি গোপন সংখ্যা রয়েছে যা Latexmkসংকলনের সাথে জড়িত ।

উত্তর:


153

আপনি যদি matplotlibল্যাটেক্স ডকুমেন্টে ভাল চিত্রগুলি ব্যবহার এবং ব্যবহার করার চেষ্টা করছেন তবে একটি এপস হিসাবে সংরক্ষণ করুন। বিশেষত, চিত্রটি প্লট করার জন্য কমান্ডগুলি চালানোর পরে এরকম কিছু চেষ্টা করুন:

plt.savefig('destination_path.eps', format='eps')

আমি খুঁজে পেয়েছি যে ইপিএস ফাইলগুলি সর্বাধিক কার্যকর হয় এবং dpiপরামিতি হ'ল এটি কোনও নথিতে সত্যই সুন্দর দেখায়।

হালনাগাদ:

সংরক্ষণের পূর্বে চিত্রটির ওরিয়েন্টেশন নির্দিষ্ট করার জন্য কেবল কল করার আগে নিম্নলিখিতটি কল করুন plt.savefigতবে প্লটটি তৈরি করার পরে (ধরে নিবেন আপনি নামের সাথে একটি অক্ষ ব্যবহার করে চক্রান্ত করেছেন ax):

ax.view_init(elev=elevation_angle, azim=azimuthal_angle)

যেখানে elevation_angleএকটি সংখ্যা (ডিগ্রিতে) মেরু কোণ নির্দিষ্ট করে (উল্লম্ব z অক্ষ থেকে নীচে) এবং azimuthal_angleঅজিমুথাল কোণ (z অক্ষের চারপাশে ) নির্দিষ্ট করে।

আমি দেখতে পেয়েছি যে চিত্রটি প্রথমে প্লট করে এবং তারপরে এটি ঘোরানো এবং কোণগুলির বর্তমান মানগুলি প্রকৃত প্লটের ঠিক নীচে উইন্ডোটির নীচে উপস্থিত হওয়া দ্বারা এই মানগুলি নির্ধারণ করা সবচেয়ে সহজ। মনে রাখবেন যে এক্স, ওয়াই, জেড, অবস্থানগুলি ডিফল্টরূপে প্রদর্শিত হয়, তবে আপনি যখন ছবিটি + টানুন + ঘোরাতে শুরু করবেন তখন দুটি কোণ দিয়ে প্রতিস্থাপন করা হবে।


@ স্পেনসারলন 2 যদি আমি সংরক্ষণের আগে চিত্রটির ওরিয়েন্টেশন পরিবর্তন করতে চাই তবে কী হবে?
ডাস্টিন

13
আমাদের কেন ডিপিআই প্যারামিটার দরকার? এপসগুলি কি ভেক্টর বিন্যাস নয়?
mkvoya

1
ভাল পয়েন্ট -
এসভিজি

আপনি চাইলে বাদ format='eps'দিতে পারেন। এই ক্ষেত্রে ফর্ম্যাটটি ফাইলের নাম থেকে অনুমান করা হয়।
টিমজিব

72

শুধু আমার ফলাফল যুক্ত করতে, ম্যাটপ্ল্লোব ব্যবহার করে।

.eps আমার সমস্ত পাঠ্যকে সাহসী করেছে এবং স্বচ্ছতা অপসারণ করেছে। .svg আমাকে উচ্চ-রেজোলিউশন ছবি দিয়েছে যা আসলে আমার গ্রাফের মতো লাগে।

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# Do the plot code
fig.savefig('myimage.svg', format='svg', dpi=1200)

আমি 1200 ডিপিআই ব্যবহার করেছি কারণ অনেকগুলি বৈজ্ঞানিক জার্নালগুলিতে চিত্রটি 1200/600/300 ডিপিআইতে চিত্রের প্রয়োজন যা চিত্রটির উপর নির্ভর করে। পছন্দসই ডিপিআইতে রূপান্তর করুন এবং জিআইএমপি বা ইনস্কেপে ফর্ম্যাট করুন।

সম্পাদনা: স্পষ্টতই dpi এর থেকে কিছু যায় আসে না .svg ভেক্টর গ্রাফিক্স এবং "অসীম রেজোলিউশন" থাকে।


2
আমরা যখন imshow(..)চিত্রটিতে কোথাও ব্যবহার করি তখন ডিপিআই অনেক বড় বিষয় বিবেচনা করে। এই বিটম্যাপগুলি এসভিজিতে এমবেড হওয়ার সাথে সাথে তারা নীচে নেমে আসে। ডিফল্ট ডিপিআই সহ, ফলাফলগুলি আমরা স্ক্রিনে যা দেখি তার চেয়ে আরও খারাপ হয়, অবশ্যই প্রকাশনাগুলির জন্য অনুপযুক্ত।
এভেজেনি সার্জিভ

আপনার এসভিজির ফাইলের আকার হ্রাস করার জন্য আমি স্কোর ( github.com/scour-project/scour ) কেও উচ্চ সুপারিশ করছি । সবচেয়ে আক্রমণাত্মক সেটিংয়ে আমি আমার ফাইলের আকারটি মূলের 50% - 5% পর্যন্ত কমিয়ে আনতে পারি যদি আমি .svgz সংক্ষেপিত ফর্ম্যাটটি ব্যবহার করি।
grofte

8

ঠিক আছে, আমি স্পেনসার্লিয়ন 2 এর উত্তরটি কাজ করে দেখলাম, তবে যদি কেউ নিজেকে এই এক লাইনের সাথে কী করতে হয় তা না জানতে পারে তবে আমাকে এইভাবে এটি করতে হয়েছিল:

beingsaved = plt.figure()

# some scatters
plt.scatter(X_1_x, X_1_y)
plt.scatter(X_2_x, X_2_y)

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000)

6

আপনি যদি ম্যাটপ্লটলিবের পরিবর্তে সমুদ্র সৈকত প্লটের সাথে কাজ করছেন তবে আপনি এইভাবে একটি .png চিত্র সংরক্ষণ করতে পারেন:

ধরা যাক আপনার কাছে কোনও matrixবস্তু রয়েছে (হয় পান্ডাস বা নিম্পি) এবং আপনি হিটম্যাপ নিতে চান:

import seaborn as sb

image = sb.heatmap(matrix)   # this gets you the heatmap
image.figure.savefig("C:/Your/Path/ ... /your_image.png")   # this saves it

এই কোডটি সামুদ্রিক সর্বশেষ সংস্করণের সাথে সামঞ্জস্যপূর্ণ। স্ট্যাকওভারফ্লো এর চারপাশের অন্যান্য কোডগুলি কেবল পূর্ববর্তী সংস্করণগুলির জন্য কাজ করেছিল।

আমার পছন্দ মতো অন্য উপায় এটি। আমি নিম্নলিখিত চিত্রটির আকারটি নীচে সেট করেছি:

plt.subplots(figsize=(15,15))

এবং তারপরে আমি কনসোলে আউটপুট প্লট করি, যেখান থেকে আমি যেখানে চাই সেখানে এটি অনুলিপি করতে পারি। (যেহেতু সমুদ্র সৈকতটি ম্যাটপ্ল্লোলিবের শীর্ষে নির্মিত, তাই কোনও সমস্যা হবে না))


5

আপনি 1920x1080 (বা 1080p) ব্যবহার করে একটি চিত্র সংরক্ষণ করতে পারেন:

fig = plt.figure(figsize=(19.20,10.80))

আপনি অনেক বেশি বা নীচেও যেতে পারেন। উপরের সমাধানগুলি মুদ্রণের জন্য ভাল কাজ করে তবে এই দিন আপনি তৈরি চিত্রটি কোনও পিএনজি / জেপিজিতে যেতে চান বা প্রশস্ত স্ক্রিন ফর্ম্যাটে উপস্থিত হতে চান।

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