2013-04-07 9 views
110

में एक सबप्लॉट के लिए xlim और ylim को कैसे सेट करें I matplotlib में एक्स और वाई धुरी को सीमित करना चाहते हैं लेकिन एक शानदार सबप्लॉट के लिए। जैसा कि मैं देख सकता हूं सबप्लॉट आकृति में कोई अक्ष संपत्ति नहीं है। मैं उदाहरण के लिए दूसरी साजिश के लिए केवल सीमाओं को बदलने के लिए चाहता हूँ!matplotlib

import matplotlib.pyplot as plt 
fig=plt.subplot(131) 
plt.scatter([1,2],[3,4]) 
fig=plt.subplot(132) 
plt.scatter([10,20],[30,40]) 
fig=plt.subplot(133) 
plt.scatter([15,23],[35,43]) 
plt.show() 
+0

कैसे आप subplots कर रहे हैं? कृपया हमें दिखाएं कि आप क्या कर रहे हैं। – tacaswell

+0

क्या यह करने के लिए एक से अधिक तरीके है ??? – Cupitor

+0

आपका प्रश्न स्पष्ट नहीं था, मैं उप-भूखंडों के साथ इस सरल को स्थापित करने के 4 या 5 तरीकों के बारे में सोच सकता हूं। – tacaswell

उत्तर

151

आपको केवल राज्य मशीन इंटरफ़ेस न केवल matplotlib के लिए ओओ इंटरफेस का थोड़ा सा सीखना चाहिए। लगभग plt.* फ़ंक्शन पतले रैपर होते हैं जो मूल रूप से gca().* करते हैं।

plt.subplotaxes ऑब्जेक्ट देता है। एक बार जब आप कुल्हाड़ियों के लिए एक संदर्भ है, वस्तु आप इसे करने के लिए सीधे साजिश इसकी सीमाओं को बदल सकते हैं आदि

import matplotlib.pyplot as plt 

ax1 = plt.subplot(131) 
ax1.scatter([1, 2], [3, 4]) 
ax1.set_xlim([0, 5]) 
ax1.set_ylim([0, 5]) 


ax2 = plt.subplot(132) 
ax2.scatter([1, 2],[3, 4]) 
ax2.set_xlim([0, 5]) 
ax2.set_ylim([0, 5]) 

और के रूप में कई कुल्हाड़ियों के लिए इतने पर के रूप में आप चाहते हैं।

या बेहतर, यह सब एक पाश में लपेट:

import matplotlib.pyplot as plt 

DATA_x = ([1, 2], 
      [2, 3], 
      [3, 4]) 

DATA_y = DATA_x[::-1] 

XLIMS = [[0, 10]] * 3 
YLIMS = [[0, 10]] * 3 

for j, (x, y, xlim, ylim) in enumerate(zip(DATA_x, DATA_y, XLIMS, YLIMS)): 
    ax = plt.subplot(1, 3, j + 1) 
    ax.scatter(x, y) 
    ax.set_xlim(xlim) 
    ax.set_ylim(ylim) 
+1

अक्ष उदाहरण रखने के साथ समस्या यह है कि इसमें सभी गुण नहीं हैं जो कि plt है, उदाहरण के लिए कोई धुरी पर साजिश के ylim प्राप्त करने के लिए axis.ylim() का उपयोग नहीं कर सकता है। – dashesy

+5

@dashesy आप 'set_xlim' और' set_ylim' का उपयोग करते हैं। 'plt' में axes ऑब्जेक्ट के साथ सीधे काम करने से कई _fewer_ विकल्प हैं। वास्तव में, 'plt' में लगभग हर फ़ंक्शन एक बहुत पतला रैपर होता है जो पहले' ax = plt.gca() 'कहता है और उसके बाद उस ऑब्जेक्ट पर जो भी कार्य करता है उसे कॉल करता है। आपको किसी भी चीज़ के लिए 'plt' का उपयोग नहीं करना चाहिए बल्कि इंटरैक्टिव काम करना चाहिए। – tacaswell

+1

हां, मैं मानता हूं कि इंटरैक्टिव संस्करण पर भरोसा नहीं करना बेहतर है, लेकिन केवल अक्ष के साथ एक साजिश के lim * प्राप्त करने का कोई तरीका नहीं है। एक साजिश के बाद, यह एक ** स्वचालित ** ylim असाइन किया जाएगा, लेकिन अक्ष में वह जानकारी नहीं होगी। तो यदि बाद के चित्र यूल पर निर्भर करते हैं, जैसा कि आपने कहा है कि किसी को वर्तमान श्रेणी को ओवरराइड करने के लिए set_ylim करना है। – dashesy