matplotlib - डीपीआई और आंकड़ा आकार के बीच संबंध



graph visualization (1)

मैंने matplotlib का उपयोग करके एक आकृति बनाई है, लेकिन मुझे प्लॉट अक्ष का एहसास हुआ है और खींची गई रेखा ज़ूम आउट हो जाती है।

पहले चर्चा के धागे को पढ़कर, यह बताता है कि आकृति का आकार कैसे निर्धारित किया जाए।

fig, ax = plt.subplots()

fig.set_size_inches(3, 1.5)

plt.savefig(file.jpeg, edgecolor='black', dpi=400, facecolor='black', transparent=True)

उपरोक्त कोड (संक्षिप्तता के लिए हटाए गए अन्य कॉन्फ़िगरेशन) के साथ, मुझे 1200 X 600 वांछित आयामों के साथ परिणामी छवि फ़ाइल मिलनी चाहिए (क्या हमें रिज़ॉल्यूशन भी कहना चाहिए?) और वांछित फ़ाइल आकार।

अनुमानित छवि को असामान्य तरीके से बढ़ाया जाता है, उदाहरण के लिए एनोटेशन बढ़े हुए हैं। जब मैं अक्ष पर लेबल के आकार को सेट कर सकता हूं, तो आंकड़ा स्केल के संबंध में आनुपातिक नहीं दिखता है क्योंकि नीचे और दाएं रीढ़ बड़ी हैं और इसलिए प्लॉट की गई रेखाएं हैं।

इसलिए सवाल यह है कि क्या गलतियां हो रही हैं?


चित्रा का आकार ( figsize ) इंच में आकृति के आकार को निर्धारित करता है। यह अंतरिक्ष की मात्रा को कुल्हाड़ियों (और अन्य तत्वों) के आंकड़े के अंदर देता है। डिफ़ॉल्ट आंकड़ा आकार है (6.4, 4.8) इंच matplotlib में 2. एक बड़ा आंकड़ा आकार लंबे समय तक ग्रंथों, अधिक कुल्हाड़ियों या अधिक टिकलैबल्स को दिखाने की अनुमति देगा।

डॉट्स प्रति इंच (डीपीआई) यह निर्धारित करता है कि चित्र में कितने पिक्सेल हैं। figsize=(w,h) में डिफ़ॉल्ट डीपीआई 100 है। अंजीर का एक आंकड़ा figsize=(w,h) होगा

px, py = w*dpi, h*dpi  # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels

तो उदाहरण के लिए (1200,600) पिक्सेल आकार के साथ एक आंकड़ा प्राप्त करने के लिए आपने आकृति आकार और dpi के कई संयोजनों को चुना हो सकता है।

figsize=(15,7.5), dpi= 80
figsize=(12,6)  , dpi=100
figsize=( 8,4)  , dpi=150
figsize=( 6,3)  , dpi=200
etc.

अब, क्या अंतर है? यह आंकड़ा के अंदर तत्वों के आकार से निर्धारित होता है। लाइनों, मार्करों, ग्रंथों जैसे अधिकांश तत्वों का आकार अंकों में दिया गया है।
Matplotlib के आंकड़े 72 प्रति इंच (ppi) अंक का उपयोग करते हैं। मोटाई 1 बिंदु वाली एक पंक्ति 1./72 होगी। इंच चौड़ा। 12 बिंदुओं वाले फ़ॉन्ट का एक पाठ 12./72 होगा। इंच की उँगलियाँ।

बेशक यदि आप इंच में आकृति का आकार बदलते हैं, तो अंक नहीं बदलेंगे, इसलिए इंच में एक बड़ा आंकड़ा अभी भी तत्वों का एक ही आकार है। आकृति का आकार बदलना इस प्रकार एक अलग आकार के कागज का एक टुकड़ा लेने जैसा है। ऐसा करने से बेशक एक ही पेन से खींची गई लाइन की चौड़ाई नहीं बदलेगी।

दूसरी ओर, डीपीआई को बदलना उन तत्वों को मापता है। 72 डीपीआई पर, 1 बिंदु आकार की एक रेखा एक पिक्सेल मजबूत होती है। 144 डीपीआई पर, यह रेखा 2 पिक्सेल मजबूत है। इसलिए एक बड़ा डीपीआई एक आवर्धक कांच की तरह काम करेगा। सभी तत्वों को लेंस की आवर्धक शक्ति द्वारा बढ़ाया जाता है।

निरंतर आंकड़ा आकार और अलग-अलग डीपीआई के लिए एक तुलना बाईं ओर नीचे की छवि में दिखाई गई है। दाईं ओर आपको एक निरंतर डीपीआई और भिन्न आकृति का आकार दिखाई देता है। प्रत्येक पंक्ति में आकृतियों में समान पिक्सेल आकार होता है।

पुन: पेश करने के लिए कोड:

import matplotlib.pyplot as plt
%matplotlib inline

def plot(fs,dpi):
    fig, ax=plt.subplots(figsize=fs, dpi=dpi)
    ax.set_title("Figsize: {}, dpi: {}".format(fs,dpi))
    ax.plot([2,4,1,5], label="Label")
    ax.legend()

figsize=(2,2)
for i in range(1,4):
    plot(figsize, i*72)

dpi=72
for i in [2,4,6]:
    plot((i,i), dpi)




visualization