2015-01-25 11 views
5

के लिए sharey = True के साथ काम नहीं करता है मैं एक उलटा वाई अक्ष के साथ 4 सबप्लॉट (2x2) बनाने की कोशिश कर रहा हूं जबकि उप-स्थान के बीच वाई अक्ष साझा करता हूं। यहाँ मैं क्या मिलता है:Axes.invert_axis() matyotlib subplots

import matplotlib.pyplot as plt 
import numpy as np 

fig,AX = plt.subplots(2, 2, sharex=True, sharey=True) 

for ax in AX.flatten(): 
    ax.invert_yaxis() 
    ax.plot(range(10), np.random.random(10)) 

enter image description here

ऐसा लगता है कि ax.invert_axis() अनदेखी की गई है जब sharey=True। अगर मैं sharey=False सेट करता हूं तो मुझे सभी सबप्लॉट्स में एक उलटा वाई अक्ष मिलता है लेकिन जाहिर है कि वाई अक्ष अब सबप्लॉट्स के बीच साझा नहीं की जाती है। क्या मैं यहाँ कुछ गलत कर रहा हूं, क्या यह एक बग है, या ऐसा कुछ करने के लिए यह समझ में नहीं आता है?

उत्तर

8

चूंकि आपने sharey=True सेट किया है, इसलिए सभी तीन अक्ष अब व्यवहार करते हैं जैसे कि वे एक थे। उदाहरण के लिए, जब आप उनमें से एक को उलटा करते हैं, तो आप सभी चार को प्रभावित करते हैं। समस्या यह है कि आप अक्षरों को for लूप में परिवर्तित कर रहे हैं जो लंबाई चार के पुनरावृत्त पर चलता है, आप इस प्रकार सभी अक्षों को कई बार परिवर्तित कर रहे हैं ... पहले से उलटा कुल्हाड़ी को घुमाकर, आप बस मूल उन्मुखीकरण। इसके बजाय उप-स्थानों की एक विषम संख्या के साथ प्रयास करें, और आप देखेंगे कि अक्ष सफलतापूर्वक उलटा हुआ है।

अपनी समस्या का समाधान करने के लिए, आपको एक सिंगल सबप्लॉट (और केवल एक बार) के वाई-अक्ष को उलटा करना चाहिए। निम्नलिखित कोड मेरे लिए काम करता है:

import matplotlib.pyplot as plt 
import numpy as np 

fig,AX = plt.subplots(2, 2, sharex=True, sharey=True) 

## access upper left subplot and invert it  
AX[0,0].invert_yaxis() 

for ax in AX.flatten(): 
    ax.plot(range(10), np.random.random(10)) 

plt.show() 
संबंधित मुद्दे