Matplotlib में एक्स एक्सिस स्केल बदलें


93

मैंने यह साजिश मतलाब का उपयोग करके बनाई है

यहां छवि विवरण दर्ज करें

Matplotlib का उपयोग करते हुए, एक्स-एक्सिस बड़ी संख्याओं जैसे कि 100000, 200000, 300000 को आकर्षित करता है। मैं यह दर्शाने के लिए कि यह वास्तव में 100000, 200000, 300000 है, 1, 2, 3 और 10 ^ 5 जैसी कोई चीज रखना चाहेंगे।

क्या matplotlib में इस तरह का पैमाना बनाने का एक सरल तरीका है?

जवाबों:


145

प्रयोग करके देखें matplotlib.pyplot.ticklabel_format:

import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))

यह a x 10^bआपके एक्स-अक्ष टिकमार्क पर वैज्ञानिक अंकन (यानी ) लागू होता है


9
क्या एक ऑफसेट जोड़ना संभव है? (उदाहरण के बजाय 0.0, 0.5, 1.0, 1.5, ... और x 10 ^ b यह 0, 5, 10, 15, ... और x 10 ^ {b-1} होगा
ईगल

24
ticklabel_formatकुल्हाड़ियों की वस्तुओं के लिए भी एक विधि है, आप कुछ इस तरह की कोशिश कर सकते हैंax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
कोविच

अगर आपके पास 2 प्लॉट हैं, तो यह कैसे काम कर सकता है?
फ़ॉकोफ़ी

2
@ क्षमा करें, ऑफसेट जोड़ने के बारे में आपके अनुवर्ती प्रश्न का मैं क्या जिक्र कर रहा था। मेरा x- अक्ष है [0.1, 0.2, ...]और मैं [1, 2, ...]एक समायोजित घातांक के साथ पसंद करूंगा । क्या आप उसके लिए कोई समाधान खोजने में सक्षम थे?
trianta2

@ ईगल मुझे भी सवाल में दिलचस्पी है trianta2 का उल्लेख किया
बेन उस्मान

15

यह आपके मूल प्रश्न का इतना उत्तर नहीं है जितना कि आपके प्रश्न के शरीर में आपके किसी एक प्रश्न का है।

थोड़ा प्रस्तावना, ताकि मेरा नामकरण अजीब न लगे:

import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )

जैसा कि उल्लेख किया गया है कि आप यह बताने के लिए ticklabel_format का उपयोग कर सकते हैं कि matplotlib को बड़े या छोटे मूल्यों के लिए वैज्ञानिक संकेतन का उपयोग करना चाहिए:

ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')

आप उस तरीके को प्रभावित कर सकते हैं जो rcParams (matplotlib आयात rcParams से) में झंडे का उपयोग करके या उन्हें सीधे सेट करके प्रदर्शित किया जाता है। मुझे '1e' और 'x10 ^' के बीच के वैज्ञानिक अंकन की तुलना में बदलने का अधिक सुरुचिपूर्ण तरीका नहीं मिला है:

ax.xaxis.major.formatter._useMathText = True

यह आपको अधिक मैटलैब-एस्क, और वास्तव में बेहतर रूप से बेहतर उपस्थिति देनी चाहिए। मुझे लगता है कि निम्नलिखित को भी ऐसा करना चाहिए:

rc('text', usetex=True)

11

अदिश फ़ॉर्मेटर का समर्थन करता है घातांक का संग्रह। डॉक्स इस प्रकार हैं:

वर्ग matplotlib.ticker.ScalarFormatter (useOffset = true, useMathText = False, useLocale = none) का उपयोग करें मामले: matplotlib.ticker.Formatter

टिक लोकेशन एक सादा पुराना नंबर है। यदि useOffset == सही है और डेटा रेंज डेटा औसत से बहुत छोटी है, तो एक ऑफसेट का निर्धारण इस तरह किया जाएगा कि टिक लेबल सार्थक हो। वैज्ञानिक संकेतन का उपयोग डेटा <10 ^ -n या डेटा> = 10 ^ मीटर के लिए किया जाता है, जहां n और m सेट_पॉवरलिमिट्स ((n, m)) का उपयोग करते हुए बिजली सीमाएं हैं। इनके लिए डिफॉल्ट्स को axes.formatter.limits आरसी पैरामीटर द्वारा नियंत्रित किया जाता है।

आपकी तकनीक यह होगी:

from matplotlib.ticker import ScalarFormatter
xfmt = ScalarFormatter()
xfmt.set_powerlimits((-3,3))  # Or whatever your limits are . . .
{{ Make your plot }}
gca().xaxis.set_major_formatter(xfmt)

प्रतिपादक को प्रारूप में प्रदर्शित करने के लिए x10^5, ScalarFormatter के साथ त्वरित करें useMathText=True

छवि के बाद

आप यह भी उपयोग कर सकते हैं:

xfmt.set_useOffset(10000)

इस तरह से परिणाम प्राप्त करने के लिए:

यहां छवि विवरण दर्ज करें


3
useMathText=Trueप्राप्त करने के लिए ScalarFormatter को तुरंत x10^4
हॉफमैन

9

मैं सरल उपाय खोजता हूं

pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.