2010-11-17 8 views
47

मेरे पास अलग-अलग सबप्लॉट्स में 3-अक्ष एक्सेलेरोमीटर टाइम-सीरीज डेटा (टी, एक्स, वाई, जेड) के भूखंड हैं जो मैं ज़ूम करना चाहता हूं। यही है, जब मैं एक प्लॉट पर "ज़ूम टू आयत" टूल का उपयोग करता हूं, जब मैं माउस को छोड़ देता हूं तो सभी 3 प्लॉट एक साथ ज़ूम करते हैं।Matplotlib/Pyplot: सबप्लॉट्स को एक साथ ज़ूम कैसे करें?

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

मुझे पता है कि मैं matplotlib/pyplot माउस इवेंट्स (http://matplotlib.sourceforge.net/users/event_handling.html) पर कब्जा कर सकता हूं, और मुझे पता है कि मैं अन्य घटनाओं को पकड़ सकता हूं (http://matplotlib.sourceforge.net /api/backend_bases_api.html#matplotlib.backend_bases.ResizeEvent), लेकिन मुझे नहीं पता कि कैसे किसी एक सबप्लॉट पर ज़ूम का अनुरोध किया गया है, और इसे दो अन्य उप-स्थानों पर दोहराने के लिए कैसे किया जाए।

मुझे लगता है मैं सभी टुकड़ों है संदेह है, और जरूरत ही नहीं एक आखिरी कीमती सुराग ...

-BobC

उत्तर

75

यह करने के लिए सबसे आसान तरीका है sharex और/या sharey कीवर्ड का उपयोग करना है जब कुल्हाड़ियों बनाने:

from matplotlib import pyplot as plt 

ax1 = plt.subplot(2,1,1) 
ax1.plot(...) 
ax2 = plt.subplot(2,1,2, sharex=ax1) 
ax2.plot(...) 
+4

मुझे संदेह है कि यह आसान होगा, लेकिन यह आसान नहीं है। धन्यवाद! – BobC

+0

बहु-चैनल समय श्रृंखला के साथ भी मेरी समस्या हल! महान! – heltonbiker

-1

सहभागितापूर्ण तरीके से इस अलग कुल्हाड़ियों पर काम करता है

for ax in fig.axes: 
    ax.set_xlim(0, 50) 
fig.draw() 
2

यदि आप अपनी शैली है तो आप इसे plt.subplots के साथ भी कर सकते हैं।

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True) 
संबंधित मुद्दे