2012-06-11 19 views
24

में स्वचालित रूप से Ylim और xlim को पुन: सहेज लें I matplotlib का उपयोग कर पायथन में डेटा प्लॉट कर रहा हूं। मैं कुछ गणनाओं के आधार पर साजिश का डेटा अपडेट कर रहा हूं और चाहता हूं कि यलिम और एक्सलिम को स्वचालित रूप से रद्द किया जाए। इसके बजाए स्केल सेट प्रारंभिक साजिश की सीमाओं के आधार पर निर्धारित किया जाता है। एक मेगावाटMatplotlib

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 
    pyplot.draw() 

पहले साजिश आदेश [0,1] से एक साजिश उत्पन्न करता है और मैं सब कुछ ठीक देख सकते हैं। अंत में, वाई-डेटा सरणी [0,10) से अधिक है, जिनमें से अधिकांश 1 से अधिक है, लेकिन आकृति की वाई-सीमा [0,1] बनी हुई है।

मुझे पता है कि मैं pyplot.ylim(...) का उपयोग करके सीमाएं मैन्युअल रूप से बदल सकता हूं, लेकिन मुझे नहीं पता कि उन्हें क्या बदलना है। for लूप में, क्या मैं पाइपप्लॉट को सीमाओं को स्केल करने के लिए कह सकता हूं जैसे कि पहली बार प्लॉट किया जा रहा था?

+2

इन दो संबंधित उत्तर देखें: http://stackoverflow.com/a/3215060/623518 और http://stackoverflow.com/a/7198623/623518 – Chris

उत्तर

34

आपको axes 'dataLim को अपडेट करने की आवश्यकता होगी, उसके बाद डेटा Lim के आधार पर axes' viewLim को अपडेट करें। अनुमोदन विधियां axes.relim() और ax.autoscale_view() विधि हैं। आपका उदाहरण तो लगता है कि:

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 

ax = pyplot.gca() 

# recompute the ax.dataLim 
ax.relim() 
# update ax.viewLim using the new dataLim 
ax.autoscale_view() 
pyplot.draw() 
+7

ध्यान दें कि यदि आपने पहले एक ही अक्ष पर 'set_xlim()' का उपयोग किया है, 'autoscale_view() 'काम नहीं करेगा। इस मामले में, इसके बजाय 'autoscale() 'का उपयोग किया जाना चाहिए (1.5.x पर परीक्षण किया गया)। –