range - python matplotlib,subplot: 如何设置坐标轴范围?

如何将第二个subplot的y轴范围设置为0,1000]? 我的数据(文本文件中的列)的FFT plot导致了()尖峰,因此实际数据不可见,

 
pylab.ylim([0,1000])

 

这是整个脚本:


# based on http://www.swharden.com/blog/2009-01-21-signal-filtering-with-python/
import numpy, scipy, pylab, random

xs = []
rawsignal = []
with open("test.dat", 'r') as f:
 for line in f:
 if line[0] != '#' and len(line) > 0:
 xs.append( int( line.split()[0] ) )
 rawsignal.append( int( line.split()[1] ) )

h, w = 3, 1
pylab.figure(figsize=(12,9))
pylab.subplots_adjust(hspace=.7)

pylab.subplot(h,w,1)
pylab.title("Signal")
pylab.plot(xs,rawsignal)

pylab.subplot(h,w,2)
pylab.title("FFT")
fft = scipy.fft(rawsignal)
#~ pylab.axis([None,None,0,1000])
pylab.ylim([0,1000])
pylab.plot(abs(fft))

pylab.savefig("SIG.png",dpi=200)
pylab.show()

时间:

http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx


 pylab.ylim([0,1000])

注意:命令必须在plot执行后执行!

使用轴对象是一个很好的方法,要直接添加和操作轴对象,请执行以下操作:


fig = pylab.figure(figsize=(12,9))

signal_axes = fig.add_subplot(211)
signal_axes.plot(xs,rawsignal)

fft_axes = fig.add_subplot(212)
fft_axes.set_title("FFT")
fft_axes.set_autoscaley_on(False)
fft_axes.set_ylim([0,1000])
fft = scipy.fft(rawsignal)
fft_axes.plot(abs(fft))

pylab.show()

有时你确实希望在plot数据之前设置轴限制,你可以设置Axes或AxesSubplot对象的"autoscaling"特性,感兴趣的函数有set_autoscale_onset_autoscalex_onset_autoscaley_on

在你的例子中,你要冻结y轴的限制,但是要允许x轴扩展以适应你的数据,因此,要将autoscaley_on属性更改为False ,这是你代码中FFT subplot 片段的修改版本:


fft_axes = pylab.subplot(h,w,2)
pylab.title("FFT")
fft = scipy.fft(rawsignal)
pylab.ylim([0,1000])
fft_axes.set_autoscaley_on(False)
pylab.plot(abs(fft))

...