उनके बनने के बाद दो सबप्लॉट का x अक्ष कैसे साझा करें?


97

मैं दो सबप्लॉट अक्ष को साझा करने का प्रयास कर रहा हूं, लेकिन आंकड़ा बनने के बाद मुझे एक्स अक्ष साझा करने की आवश्यकता है। उदाहरण के लिए, मैं यह आंकड़ा बनाता हूं:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
plt.plot(t,x)
ax2 = plt.subplot(212)
plt.plot(t,y)

# some code to share both x axis

plt.show()

टिप्पणी के बजाय मैं दोनों एक्स अक्ष को साझा करने के लिए कुछ कोड डालूंगा। मुझे कोई सुराग नहीं मिला कि मैं ऐसा कैसे कर सकता हूं। वहाँ कुछ विशेषताएँ हैं _shared_x_axesऔर _shared_x_axesजब मैं अक्ष ( fig.get_axes()) की जाँच करता हूँ, लेकिन मुझे नहीं पता कि उन्हें कैसे जोड़ा जाए।

जवाबों:


139

कुल्हाड़ियों को साझा करने का सामान्य तरीका निर्माण पर साझा गुण बनाना है। भी

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212, sharex = ax1)

या

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)

उनके बनने के बाद कुल्हाड़ियों को साझा करना इसलिए आवश्यक नहीं होना चाहिए।

हालाँकि, अगर किसी कारण से, आपको एक्सिस को बनाने के बाद साझा करने की आवश्यकता होती है (वास्तव में, एक अलग पुस्तकालय का उपयोग करके जो कुछ सबप्लॉट बनाता है, जैसे यहां , या इनसेट एक्सिस साझा करना एक कारण हो सकता है), फिर भी एक समाधान होगा:

का उपयोग करते हुए

ax1.get_shared_x_axes().join(ax1, ax2)

दो कुल्हाड़ियों के बीच एक लिंक बनाता है, ax1और ax2। निर्माण के समय में साझा करने के विपरीत, आपको एक अक्ष के लिए मैन्युअल रूप से xticklabels को सेट करना होगा (उस स्थिति में जो वांछित है)।

एक पूर्ण उदाहरण:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)

ax1.plot(t,x)
ax2.plot(t,y)

ax1.get_shared_x_axes().join(ax1, ax2)
ax1.set_xticklabels([])
# ax2.autoscale() ## call autoscale if needed

plt.show()

अजीब कारण है, वैसे, क्या मुझे अचार के साथ कुछ आकृति बचाई गई है और मैं उन्हें एक और कार्यक्रम के साथ फिर से लोड करता हूं जो कि शेयर संपत्ति को खो देता है।
ymmx

4
यह चुनिंदा सबप्लॉट्स को जोड़ने के लिए उपयोगी है। उदाहरण के लिए, 4 सबप्लॉट के साथ एक आंकड़ा: दो समय श्रृंखला और दो हिस्टोग्राम। यह आपको समय श्रृंखला का चयन करने की अनुमति देता है।
हामिद

2
ग्रूपर ऑब्जेक्ट के लिए एपीआई डॉक्स: matplotlib.org/2.0.2/api/…
michaelosthege

3
ओह, मैं सिर्फ पता लगा कि कैसे साझाकरण हटाने (जो एक बड़ी ग्रिड में उपयोगी हो सकता है) एक धुरी - कि धुरी पर, कर g = ax.get_shared_y_axes(); g.remove(a) for a in g.get_siblings(ax)]। शुरुआती बिंदु के लिए धन्यवाद!
naught101

3
@ naught101 आप बस कॉल कर सकते हैं ax2.autoscale()
इम्पोर्टेंसऑफबिंगएर्नेस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.