'Log' और 'symlog' में क्या अंतर है?


101

में matplotlib , मैं या तो अक्ष स्केलिंग सेट कर सकते हैं pyplot.xscale()या Axes.set_xscale()। दोनों कार्य तीन अलग-अलग पैमानों को स्वीकार करते हैं: 'linear'| 'log'| 'symlog'

बीच क्या अंतर है 'log'और 'symlog'? मैंने एक साधारण परीक्षण में, वे दोनों बिल्कुल एक जैसे दिखे।

मुझे पता है कि दस्तावेज़ कहते हैं कि वे विभिन्न मापदंडों को स्वीकार करते हैं, लेकिन मैं अभी भी उनके बीच के अंतर को नहीं समझता हूं। क्या कोई इसे समझा सकता है? यदि यह कुछ नमूना कोड और ग्राफिक्स है तो उत्तर सबसे अच्छा होगा! (यह भी: 'सिमलॉग' नाम कहां से आया है?)

जवाबों:


188

मुझे आखिरकार उनके बीच के अंतर को समझने के लिए कुछ प्रयोग करने का समय मिला। यहाँ मैंने क्या पाया:

  • logकेवल सकारात्मक मूल्यों की अनुमति देता है, और आपको यह चुनने की अनुमति देता है कि नकारात्मक लोगों को कैसे संभालें ( maskया clip)।
  • symlogसममित लॉग का मतलब है , और सकारात्मक और नकारात्मक मूल्यों की अनुमति देता है।
  • symlog प्लॉट के भीतर शून्य के चारों ओर एक सीमा निर्धारित करने की अनुमति देता है लॉगरिदमिक के बजाय रैखिक होगा।

मुझे लगता है कि सब कुछ ग्राफिक्स और उदाहरणों के साथ समझने में बहुत आसान हो जाएगा, तो आइए उन्हें आज़माएं:

import numpy
from matplotlib import pyplot

# Enable interactive mode
pyplot.ion()

# Draw the grid lines
pyplot.grid(True)

# Numbers from -50 to 50, with 0.1 as step
xdomain = numpy.arange(-50,50, 0.1)

# Plots a simple linear function 'f(x) = x'
pyplot.plot(xdomain, xdomain)
# Plots 'sin(x)'
pyplot.plot(xdomain, numpy.sin(xdomain))

# 'linear' is the default mode, so this next line is redundant:
pyplot.xscale('linear')

'रेखीय' स्केलिंग का उपयोग करके एक ग्राफ

# How to treat negative values?
# 'mask' will treat negative values as invalid
# 'mask' is the default, so the next two lines are equivalent
pyplot.xscale('log')
pyplot.xscale('log', nonposx='mask')

'लॉग' स्केलिंग और नॉनपॉक्स = 'मास्क' का उपयोग करके एक ग्राफ

# 'clip' will map all negative values a very small positive one
pyplot.xscale('log', nonposx='clip')

'लॉग' स्केलिंग और नॉनप्लेक्स = 'क्लिप' का उपयोग करने वाला एक ग्राफ

# 'symlog' scaling, however, handles negative values nicely
pyplot.xscale('symlog')

'सिमलॉग ’स्केलिंग का उपयोग करके एक ग्राफ

# And you can even set a linear range around zero
pyplot.xscale('symlog', linthreshx=20)

'सिम्बल' स्केलिंग का उपयोग करके एक ग्राफ, लेकिन (-20,20) के भीतर रैखिक

पूर्णता के लिए, मैंने प्रत्येक आकृति को बचाने के लिए निम्न कोड का उपयोग किया है:

# Default dpi is 80
pyplot.savefig('matplotlib_xscale_linear.png', dpi=50, bbox_inches='tight')

याद रखें कि आप आकृति का आकार बदलकर उपयोग कर सकते हैं:

fig = pyplot.gcf()
fig.set_size_inches([4., 3.])
# Default size: [8., 6.]

(यदि आप मेरे अपने प्रश्न का उत्तर देने के बारे में अनिश्चित हैं, तो इसे पढ़ें )


19

सिम्लॉग लॉग की तरह है लेकिन आपको शून्य के पास मूल्यों की एक सीमा को परिभाषित करने की अनुमति देता है जिसके भीतर भूखंड रैखिक है, भूखंड शून्य के आसपास अनंत तक जाने से बचने के लिए।

से http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.set_xscale

एक लॉग ग्राफ़ में, आपके पास कभी भी शून्य मान नहीं हो सकता है, और यदि आपके पास एक ऐसा मूल्य है जो शून्य के करीब आता है, तो यह आपके ग्राफ के नीचे से नीचे की ओर स्पाइक कर देगा (असीम रूप से नीचे की ओर) क्योंकि जब आप "लॉग (शून्य के करीब पहुंच)" लेते हैं तो आप "नकारात्मक अनन्तता के निकट आना"।

सहानुभूति आपको उन स्थितियों में मदद करेगी जहां आप एक लॉग ग्राफ़ रखना चाहते हैं, लेकिन जब मूल्य कभी-कभी नीचे या शून्य की ओर जा सकता है, लेकिन आप अभी भी ग्राफ़ पर एक सार्थक तरीके से दिखाना चाहते हैं। यदि आपको सिमलॉग की आवश्यकता है, तो आपको पता होगा।


ठीक है ... मैंने पढ़ा है, लेकिन मुझे अभी भी नहीं पता है कि मुझे एक या दूसरे का उपयोग कब करना चाहिए। मैं किसी प्रकार के चित्रमय उदाहरण की उम्मीद कर रहा था ताकि मैं वास्तव में देख सकूं कि समस्या क्या है जिसे हल करने की कोशिश करता है।
डेनिलसन सिया मिया

4

यहाँ व्यवहार का एक उदाहरण है, जब सिम्बल आवश्यक है:

प्रारंभिक कथानक, स्केल नहीं किया गया। ध्यान दें कि x ~ 0 पर कितने डॉट्स क्लस्टर हैं

    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

[ बिना स्केल का '

स्केल्ड प्लॉट लॉग करें। सब कुछ ढह गया।

    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('log')
    ax.set_yscale('log')
    ax.set(xlabel='Score, log', ylabel='Total Amount Deposited, log')

लॉग स्केल '

इसका पतन क्यों हुआ? एक्स-अक्ष पर कुछ मानों के बहुत करीब या 0 के बराबर होने के कारण।

सिंबल स्केल्ड प्लॉट। सब कुछ वैसा ही है जैसा होना चाहिए।

    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('symlog')
    ax.set_yscale('symlog')
    ax.set(xlabel='Score, symlog', ylabel='Total Amount Deposited, symlog')

साइमलॉग स्केल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.