बस basex=2
या basey=2
निर्दिष्ट करें।
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_xscale('log', basex=2)
ax.set_yscale('log', basey=2)
ax.plot(range(1024))
plt.show()
शून्य पार व्यवहार के लिए, क्या आप की बात कर रहे हैं "सममित प्रवेश करें" साजिश (यानी "symlog") है। जो भी इसके लायक है, डेटा फ़िल्टर नहीं किया गया है, यह सिर्फ 0 के पास एक रैखिक साजिश है और हर जगह लॉग प्लॉट है। यह वह स्तर है जो डेटा को बदलता है।
आम तौर पर आप सिर्फ ax.set_xscale('symlog', basex=2)
करते हैं, लेकिन एक गैर 10 आधार का उपयोग कर symlog भूखंडों के लिए इस समय गाड़ी प्रतीत होता है।
संपादित करें: हे! बग क्लासिक गलती के कारण प्रतीत होता है: एक परिवर्तनीय डिफ़ॉल्ट तर्क का उपयोग करना।
मैंने एक बग रिपोर्ट दायर की है, लेकिन यदि आप इसे ठीक करने की तरह महसूस करते हैं, तो आपको SymmetricalLogLocator
की विधि में , लाइन 1376 के आसपास, मामूली संपादन करने की आवश्यकता होगी।
इसके बजाय
def __init__(self, transform, subs=[1.0]):
self._transform = transform
self._subs = subs
...
को कुछ इसी तरह करने के लिए यह परिवर्तन की: बनाया कि परिवर्तन के साथ
def __init__(self, transform, subs=None):
self._transform = transform
if subs is None:
self._subs = [1.0]
else:
self._subs = subs
....
, यह उम्मीद करती है ...
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.set_xscale('symlog', basex=2)
ax.set_yscale('symlog', basey=2)
x = np.arange(-1024, 1024)
ax.plot(x, x)
plt.show()
लॉग्स केवल सकारात्मक बहस के लिए परिभाषित कर रहे हैं। इस आधार पर ध्यान दिए बिना रखती है, अर्थात यह, प्राकृतिक लॉग के लिए रखती है log base 10, लॉग आधार 2 आदि इसलिए तुम सिर्फ कुछ है, जो एक logscale में शून्य है जब तक आप इन शून्य मान के लिए कुछ करना साजिश नहीं कर सकते। –
उस सवाल से जवाब का प्रयोग करें, लेकिन पहले को फ़िल्टर y- मानों कि 0 और उनकी संगत एक्स मूल्यों (कि कैसे numpy उन्हें वैसे भी ध्यान नहीं देता है)। –
numpy में ऐसा करने के लिए एक शानदार तरीका क्या है? फ़िल्टरिंग कोड को जटिल करती है क्योंकि अब मेरे पास सरणी की एक प्रतिलिपि है, और एक प्रति फ़िल्टर की गई है ... – user248237dfsf