अजगर में मैटलोट्लिब के साथ प्लॉट लॉगरिदमिक कुल्हाड़ियों


369

मैं matplotlib का उपयोग करके एक लॉगरिदमिक अक्ष के साथ एक ग्राफ प्लॉट करना चाहता हूं।

मैं डॉक्स पढ़ रहा हूं, लेकिन सिंटैक्स का पता नहीं लगा सकता। मुझे पता है कि यह शायद 'scale=linear'प्लॉट के तर्कों की तरह कुछ सरल है, लेकिन मैं इसे सही नहीं समझ सकता

नमूना कार्यक्रम:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color='blue', lw=2)
pylab.show()

जवाबों:


384

आप Axes.set_yscaleविधि का उपयोग कर सकते हैं । जो आपको Axesऑब्जेक्ट के बनने के बाद पैमाना बदलने की अनुमति देता है। यह भी अगर आप की जरूरत है तो उपयोगकर्ता को पैमाने लेने के लिए एक नियंत्रण बनाने के लिए आपको अनुमति देगा।

जोड़ने के लिए प्रासंगिक लाइन है:

ax.set_yscale('log')

आप 'linear'एक रेखीय पैमाने पर वापस स्विच करने के लिए उपयोग कर सकते हैं । यहां आपका कोड कैसा दिखेगा:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color='blue', lw=2)

ax.set_yscale('log')

pylab.show()

परिणाम चार्ट


6
यह तरीका अच्छा है क्योंकि यह सभी प्रकार के भूखंडों (जैसे हिस्टोग्राम) के साथ काम करता है, न कि केवल "प्लॉट" (जो कि सेमीलॉग / सेमिलॉजी करता है) के साथ
टिम व्हिटकोम्ब

16
मैं दो की शक्तियों के लिए एक अक्ष का उपयोग करने के तरीके की तलाश में यहाँ आया था: pylab.gca ()। Set_xscale ('लॉग', बेसएक्स = 2)
zje

53
माटप्लोटलिब के पास है semilogy()। इसके अलावा, उपयोग करने की pyplot.yscale()तुलना में सीधे उपयोग करना आसान है ax.set_yscale('log'), क्योंकि axऑब्जेक्ट को प्राप्त करने की कोई आवश्यकता नहीं है (जो हमेशा उपलब्ध नहीं है)।
एरिक ओ लेबिगॉट

5
यदि आप दोनों अक्षों पर लॉग स्केल चाहते हैं, तो loglog()एक्स-अक्ष पर कोशिश करें या केवल कोशिश करेंsemilogx()
drevicko

10
@ मैं इसके विपरीत सलाह दूंगा। एक स्पष्ट axवस्तु का उपयोग करना बेहतर है, pyplotजिसका उपयोग करने के लिए केवल उस अक्ष पर लागू हो सकता है जिसे आप इसे चाहते हैं।
ताकसवेल

288

सबसे पहले, यह मिश्रण pylabऔर pyplotकोड के लिए बहुत साफ नहीं है । क्या अधिक है, पाइलट शैली का उपयोग पाइलैब का उपयोग करने पर किया जाता है

यहां केवल pyplotकार्यों का उपयोग करके थोड़ा साफ किया गया कोड है:

from matplotlib import pyplot

a = [ pow(10,i) for i in range(10) ]

pyplot.subplot(2,1,1)
pyplot.plot(a, color='blue', lw=2)
pyplot.yscale('log')
pyplot.show()

प्रासंगिक कार्य है pyplot.yscale()। यदि आप ऑब्जेक्ट-ओरिएंटेड संस्करण का उपयोग करते हैं, तो इसे विधि द्वारा प्रतिस्थापित करें Axes.set_yscale()। याद रखें कि आप pyplot.xscale()(या Axes.set_xscale()) का उपयोग करके एक्स अक्ष के पैमाने को भी बदल सकते हैं ।

मेरे प्रश्न की जांच करें कि 'लॉग' और 'सिमलॉग' में क्या अंतर है? मैटलपोटलिब प्रदान करता है कि ग्राफ तराजू के कुछ उदाहरण देखने के लिए।


एक कठिन समय यह पता लगाने की कोशिश कर रहा था कि यह कैसे करना है। इस जवाब ने मेरा दिन बचा लिया!
HWende

13
pyplot.semilogy()अधिक प्रत्यक्ष है।
एरिक ओ लेबिगॉट

64

आपको बस प्लॉट के बजाय सेमिलॉजी का उपयोग करने की आवश्यकता है :

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.semilogy(a, color='blue', lw=2)
show()

1
LOL, मैं व्हॉटआम के लिए लॉग (फ्लोटअरे) कोशिश कर रहा था, धन्यवाद आपने मेरा दिन बचा लिया
प्रदीप

5
सेमीलॉग भी है । यदि आपको दोनों कुल्हाड़ियों पर लॉग की आवश्यकता है, तो loglog
drevicko

40

यदि आप लघुगणक के आधार को बदलना चाहते हैं, तो बस जोड़ें:

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log

8

मुझे पता है कि यह थोड़ा ऑफ-टॉपिक है, क्योंकि कुछ टिप्पणियों में ax.set_yscale('log')"सबसे अच्छा" समाधान होने का उल्लेख किया गया था, मुझे लगता है कि एक खंडन का कारण हो सकता है। मैं ax.set_yscale('log')हिस्टोग्राम और बार प्लॉट के लिए उपयोग करने की सलाह नहीं दूंगा। मेरे संस्करण (0.99.1.1) में मैं कुछ प्रतिपादन समस्याओं में भाग लेता हूं - निश्चित नहीं कि यह समस्या कितनी सामान्य है। हालाँकि, बार और हिस्ट दोनों के पास लॉग-इन करने के लिए y-स्केल सेट करने के लिए वैकल्पिक तर्क हैं, जो ठीक काम करते हैं।

संदर्भ: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist


5

तो अगर आप बस अनसोशेबल एपीआई का उपयोग कर रहे हैं, जैसे कि मैं अक्सर हूं (मैं इसे आईफ़ोन में बहुत उपयोग करता हूं), तो यह बस है

yscale('log')
plot(...)

उम्मीद है कि यह किसी को एक सरल जवाब की तलाश में मदद करता है! :)।


-1

आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

np.log(df['col_whose_log_you_need']).iplot(kind='histogram', bins=100,
                                   xTitle = 'log of col',yTitle ='Count corresponding to column',
                                   title='Distribution of log(col_whose_log_you_need)')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.