2025, Nov 02 01:31

आधार 2 पर लॉग–लॉग प्लॉट में माइनर टिक्स क्यों गायब होते हैं और समाधान

Matplotlib में लॉग–लॉग प्लॉट पर आधार 2 लेने पर माइनर टिक्स क्यों गायब लगते हैं, ग्रिड समान-दूरी का क्यों दिखता है, और पढ़ने योग्य टिक/ग्रिड लौटाने के उपाय जानें।

लॉग–लॉग प्लॉट बड़े–बड़े स्केल को समेटने और गुणात्मक रिश्तों को उजागर करने के लिए बेहतरीन होते हैं। लेकिन सौंदर्यशास्त्र भी मायने रखता है: बराबर दूरी पर दिखने वाले माइनर टिक्स यह संकेत देते हैं कि दोनों अक्ष लॉगरिथमिक हैं। अगर आप Matplotlib में लॉगरिथमिक आधार को 2 पर बदलते हैं, तो वे माइनर टिक्स गायब हो जाते हैं और ग्रिड समान दूरी वाला दिखता है। डेटा सही रहता है, फिर भी प्लॉट पढ़ना कठिन हो जाता है। यह क्यों होता है और पढ़ने योग्य, लॉगरिथमिक-सा दिखने वाला ग्रिड वापस कैसे पाएं—यही बात यहां है।

डिफ़ॉल्ट आधार के साथ सेटअप दोहराना

नीचे दिया गया स्निपेट Matplotlib के डिफ़ॉल्ट्स के साथ एक लॉग–लॉग प्लॉट बनाता है। नतीजे में वे परिचित माइनर टिक्स शामिल होते हैं जो लॉग स्केलिंग को साफ़-साफ़ दिखाते हैं।

import numpy as np
import matplotlib.pyplot as plt
xvals = np.array([8, 16, 32, 64, 128, 256, 512, 1024])
yvals = np.array([2.412, 3.424, 5.074, 7.308, 11.444, 18.394, 30.644, 48.908])
log_base = 2  # आधार प्लेसहोल्डर
fig_obj, ax_obj = plt.subplots(figsize=(8, 6))
ax_obj.plot(xvals, yvals, 'o--')
ax_obj.set_xscale('log')
ax_obj.set_yscale('log')
ax_obj.set(title='loglog')
ax_obj.grid()
ax_obj.grid(which='minor', color='0.9')

डिफ़ॉल्ट आधार पर, माइनर टिक्स मेजर टिक्स के बीच परिचित स्थानों पर दिखते हैं, जिससे लॉग ग्रिड सघन होते हुए भी पढ़ने योग्य रहता है।

आधार 2 पर स्विच करने पर माइनर टिक्स क्यों गायब होते हैं

अब दोनों अक्षों को आधार 2 पर कर दें। प्लॉटेड मान सही रहते हैं, लेकिन ग्रिड में वे विशिष्ट लॉगरिथमिक माइनर टिक्स नहीं दिखते और दूरी एकसमान लगती है।

import numpy as np
import matplotlib.pyplot as plt
xvals = np.array([8, 16, 32, 64, 128, 256, 512, 1024])
yvals = np.array([2.412, 3.424, 5.074, 7.308, 11.444, 18.394, 30.644, 48.908])
log_base = 2
fig_obj, ax_obj = plt.subplots(figsize=(8, 6))
ax_obj.plot(xvals, yvals, 'o--')
ax_obj.set_xscale('log', base=log_base)
ax_obj.set_yscale('log', base=log_base)
ax_obj.set(title='loglog')
ax_obj.grid()
ax_obj.grid(which='minor', color='0.9')

विकल्प के तौर पर ax.loglog(..., base=...) इस्तेमाल करना या टिक लेबल्स को मैन्युअल रूप से फ़ॉर्मैट करना भी बराबर-दूरी वाले माइनर टिक्स वापस नहीं लाता।

ऐसा क्यों होता है

आधार 10 पर मेजर टिक्स 10, 100, 1000, ... पर आते हैं और माइनर टिक्स 20, 30, 40, .... पर। आधार 2 में मेजर टिक्स 2, 4, 8, 16, ... पर होते हैं। मेजर टिक्स के बीच कई माइनर टिक्स रखने के लिए तर्कसंगत स्थान ही नहीं बचते।

यही बात मूल है। आधार 10 में हर दशक के भीतर 2×, 3×, …, 9× जैसी स्वाभाविक उप-विभाजनें होती हैं। आधार 2 में मेजर टिक्स पहले ही 2 की घातों पर आ जाते हैं, तो बीच में बहु-स्तरीय माइनर संरचना स्पष्ट नहीं रहती। नतीजतन, Matplotlib ऐसे अर्थपूर्ण माइनर टिक्स की श्रृंखला नहीं रख पाता जो “लॉगरिथमिक दूरी” जैसी दिखे।

व्यावहारिक उपाय: ऐसे आधार चुनें जो उपयोगी उप-विभाजन दें

यदि उद्देश्य रूप-रंग और पढ़ने में आसानी है, तो ऐसे लॉगरिथमिक आधार चुनें जो उपयोगी उप-विभाजन बनाएं। x-अक्ष पर आधार 8 और y-अक्ष पर आधार 4 लेने से ग्रिड वैसा ही दिखता और समझ में आता है जैसा डिफ़ॉल्ट आधार 10 में, और फिर भी स्केलिंग आपके डेटा रेंज से मेल खाती रहती है।

import numpy as np
import matplotlib.pyplot as plt
xvals = np.array([8, 16, 32, 64, 128, 256, 512, 1024])
yvals = np.array([2.412, 3.424, 5.074, 7.308, 11.444, 18.394, 30.644, 48.908])
x_base_val = 8
y_base_val = 4
fig_obj, ax_obj = plt.subplots(figsize=(8, 6))
ax_obj.plot(xvals, yvals, 'o--')
ax_obj.set_xscale('log', base=x_base_val)
ax_obj.set_yscale('log', base=y_base_val)
ax_obj.set(title='loglog')
ax_obj.grid()
ax_obj.grid(which='minor', color='0.9')

इस तरह सही लॉग स्केलिंग बनी रहती है और साथ ही ऐसा ग्रिड लौट आता है जो देखने में मददगार हो—क्योंकि चुने गए आधार टिक मार्क्स के अधिक सहज स्थान संभव करते हैं।

यह बारीकी क्यों अहम है

एक्सप्लोरेटरी विश्लेषण और रिपोर्टिंग में धारणा ही व्याख्या को दिशा देती है। जब माइनर टिक्स गायब हो जाते हैं या बराबर दूरी पर दिखते हैं, तो पाठक समझ नहीं पाते कि चार्ट लॉग–लॉग है। समझदारी से चुने गए आधार स्केल की संरचना को स्वयं स्पष्ट बनाते हैं और ढाल या सापेक्ष वृद्धि की तुलना करते समय मानसिक बोझ घटाते हैं।

निष्कर्ष

लॉग–लॉग प्लॉट उतने ही पढ़ने योग्य होते हैं जितनी अच्छी उनकी टिक संरचना होती है। अगर आधार 2 पर स्विच करने से परिचित माइनर टिक्स गायब हो जाते हैं, तो यह रेंडरिंग की खामी नहीं, बल्कि आधार की विशेषता है। ऐसे आधार चुनें जो हर अक्ष पर अर्थपूर्ण उप-विभाजन दिखाएं—जैसे यहां x के लिए 8 और y के लिए 4—ताकि ग्रिड एक नज़र में प्लॉट की लॉगरिथमिक प्रकृति बता सके।

यह लेख StackOverflow पर एक प्रश्न से लिया गया है, जिसे Igor Soares ने पूछा था, और Igor Soares के उत्तर पर आधारित है।