2012-11-22 17 views
5

meteogramमैं बहुत matplotlib में इस meteogram जैसे कई subplots के साथ एक आंकड़ा बनाने के लिए देख रहा हूँ matplotlib

में भिन्न आकार के साथ subplots बना रहा है। मुझे अलग-अलग ऊंचाई के कई सबप्लॉट्स की आवश्यकता होगी (सभी समान चौड़ाई, लेकिन कुछ "स्किनीयर" होंगे और कुछ "फट" होंगे)। उपर्युक्त छवि की तरह, कुछ सबप्लॉट्स को बड़ा होना चाहिए और कुछ को छोटे होने की आवश्यकता है, लेकिन उन्हें उपयोगी जानकारी देने के लिए काफी बड़ा होना चाहिए चाहे कितने सबप्लॉट हों।

जब मैं एक subplot को pyplot.subplot (2,1,1) के रूप में बनाता हूं, तो इसमें पहलू अनुपात की आवश्यकता होती है, लेकिन यदि मैं पंक्तियों की संख्या बढ़ाता हूं (उदाहरण के लिए सबप्लॉट (3,1,1)) सबप्लॉट बन जाता है "बेहद पतली"। मुझे एक आकृति पर इन भूखंडों में से आधा दर्जन फिट करने की आवश्यकता होगी, लेकिन अगर मैं आंकड़े पर अधिक सबप्लॉट फिट करना शुरू करता हूं तो वे बहुत "छोटे" बन जाते हैं।

बस रखो, क्या यह मेटाग्राम एक छवि है जो कई छवियों को एक साथ सिलाई किए बिना matplotlib में संभव है? यूआरएल अनुरोध से, ये छवियां वापस लौटा दी जाएंगी, इसलिए सर्वर से तकनीकी रूप से यह संभव है लेकिन अगर मैं पुस्तकालय में इस समस्या को ठीक कर सकता हूं जिसे प्राथमिकता दी जाएगी।

matplotlib का प्रलेखन शानदार है, लेकिन ऐसा लगता है कि मैटलप्लिब को आपको समान अनुपात अनुपात के साथ सबप्लॉट देने के लिए ट्यून किया गया है, जिससे आप सबप्लॉट्स को सबप्लॉट्स अनुपात के साथ मनमाने ढंग से पहलू अनुपात के साथ देने के बजाय ट्यून किए जाते हैं। मुझे अलग-अलग सबप्लॉट आकारों के जाल पर एक भी उदाहरण नहीं मिल रहा है।

+0

मुझे पता है कि यह बहुत पुराना सवाल है। लेकिन यह पूछने का विरोध नहीं कर सका। क्या आपकी मेटाग्राम स्क्रिप्ट ऊपर और चल रही है? क्या यह जीपीएल के तहत लाइसेंस प्राप्त है? –

+0

दुर्भाग्य से, नहीं। जैसा कि अक्सर मेरे अनुभव में होता है, परियोजना को तोड़ दिया गया था। मैंने हार्ड ड्राइव को दोबारा सुधार दिया जिसमें यह कोड था, इसलिए यह हमेशा के लिए खो गया है। माफ़ कीजिये। – user1844160

उत्तर

6

आप सामान्यीकृत निर्देशांक (निर्माण पर) में एक बाध्यकारी बॉक्स देकर अक्ष की स्थिति का पूर्ण नियंत्रण प्राप्त कर सकते हैं। प्रारूप [बाएं, शीर्ष, चौड़ाई, ऊंचाई] है।

कैसे मैं आंकड़ा करने के बारे में जाना होगा का एक उदाहरण: करने के लिए

import matplotlib.pyplot as plt 


left = 0.1 
width = 0.8 

ax1 = plt.axes([left, 0.5, width, 0.45]) 
ax2 = plt.axes([left, 0.3, width, 0.19]) 
ax3 = plt.axes([left, 0.2, width, 0.09], sharex=ax2) 
ax4 = plt.axes([left, 0.1, width, 0.09], sharex=ax2) 

# ticks at the top of the top plot 
ax1.xaxis.tick_top() 

# remove ticks for ax2 and ax3 
ax2.xaxis.set_visible(False) 
ax3.xaxis.set_visible(False) 

# only put ticks on the bottom of ax4 
ax4.xaxis.tick_bottom() 

plt.show() 

मैं जो आपको पता चल सकता उपयोगी (हटाने के शीर्ष टिक्स कुछ कार्यक्षमता जोड़ दिया है टिक, xaxis साझा करने, चलती अक्षरों के शीर्ष)।

परिणाम:

Example output

HTH

+0

यह अच्छा है। कुछ अतिरिक्त कोड के साथ, इनपुट के रूप में कुछ आकार पैरामीटर देना संभव है, और आउटपुट के रूप में लेआउट बाउंडिंग बॉक्स को वापस करना संभव है! – heltonbiker

+0

उत्तर के लिए धन्यवाद। यही वह है जिसकी तलाश में मैं हूं। जबकि मैं आपके कोड का परीक्षण कर रहा था, मैंने यह भी देखा कि विभिन्न पहलू अनुपात (एक्स और वाई आकार) के साथ छवियों को कैसे सहेजना है और इन दो तकनीकों के बीच मेरे पास सब कुछ है जो मुझे चाहिए। एक बार फिर धन्यवाद। – user1844160

2

आप Gridspec या subplot2grid उपयोग कर सकते हैं। मैंने बाद में उपयोग करने के लिए और अधिक प्राकृतिक पाया, लेकिन यह व्यक्तिगत वरीयता है। इसके अलावा, पेल्सन का जवाब अभी तक ऐसा करने का एक और तरीका है।

this example में कोड के दो सबसे नीचे-ब्लॉक पर एक नज़र डालें।

+0

मैं उत्तर की सराहना करता हूं। मैं निश्चित रूप से इन में देखने जा रहा हूँ। – user1844160