Matplotlib में PdfPages बैकएंड का उपयोग करके एकाधिक फिगर्स को एक ही PDF फ़ाइल में सहेजा जा सकता है।
चरण
- फिगर आकार सेट करें और पैडिंग समायोजित करें
- पहला फिगर (
fig1) बनाएं और प्लॉट करें - दूसरा फिगर (
fig2) बनाएं और प्लॉट करें - फाइलनाम वेरिएबल इनिशियलाइज़ करें
- उपयोगकर्ता-परिभाषित फंक्शन
save_multi_image()बनाएं - फंक्शन को फाइलनाम के साथ कॉल करें
- नया
PdfPagesऑब्जेक्ट बनाएं - खुले फिगर्स की संख्या प्राप्त करें
- खुले फिगर्स पर पुनरावृति करके उन्हें फ़ाइल में सहेजें
- बनाए गए PDF ऑब्जेक्ट को बंद करें
उदाहरण
from matplotlib import pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# पहला फिगर
fig1 = plt.figure()
plt.plot([2, 1, 7, 1, 2], color='red', lw=5)
# दूसरा फिगर
fig2 = plt.figure()
plt.plot([3, 5, 1, 5, 3], color='green', lw=5)
def save_multi_image(filename):
"""एकाधिक फिगर्स को एक PDF में सहेजें"""
pp = PdfPages(filename)
fig_nums = plt.get_fignums()
figs = [plt.figure(n) for n in fig_nums]
for fig in figs:
fig.savefig(pp, format='pdf')
pp.close()
filename = "multi.pdf"
save_multi_image(filename)
आउटपुट
प्रोजेक्ट डायरेक्टरी में multi.pdf बनेगी जिसमें दोनों प्लॉट्स (लाल लाइन और हरी लाइन) अलग-अलग पेज पर सहेजे जाएंगे।
उन्नत: प्रत्येक फिगर को अलग पेज पर सहेजें
def save_multi_image_advanced(filename):
with PdfPages(filename) as pp:
for fig_num in plt.get_fignums():
fig = plt.figure(fig_num)
fig.savefig(pp, format='pdf', bbox_inches='tight')
plt.close(fig) # मेमोरी मुक्त करें
मुख्य बिंदु
PdfPagesमल्टी-पेज PDF बनाने के लिए संदर्भ प्रबंधक (context manager) के रूप में काम करता हैplt.get_fignums()सभी खुले फिगर नंबर लौटाता हैbbox_inches='tight'अतिरिक्त सफेद स्थान हटाता है- लूप के बाद
plt.close(fig)मेमोरी लीक रोकता है
अन्य फॉर्मेट्स
यही दृष्टिकोण अन्य वेक्टर फॉर्मेट्स (SVG, EPS) के लिए भी काम करता है, बस फॉर्मेट बदलें।