Python, Matplotlib, 서브플롯: 축 범위를 설정하는 방법은 무엇인가요?

두 번째 하위 플롯의 Y축 범위를 [0,1000]과 같이 설정하려면 어떻게 해야 하나요? 내 데이터(텍스트 파일의 열)의 FFT 플롯에서 (inf.?) 스파이크가 발생하여 실제 데이터가 표시되지 않습니다.

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()

다른 개선 사항도 환영합니다!

질문에 대한 의견 (1)

http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx 에서 확인할 수 있습니다.

 pylab.ylim([0,1000])

참고: 명령은 플롯 이후에 실행해야 합니다!

해설 (4)

축 개체]1를 사용하는 것은 이를 위한 좋은 방법입니다. 여러 그림 및 하위 플롯과 상호 작용하려는 경우 유용합니다. 축 개체를 직접 추가하고 조작하려면 다음과 같이 하세요:

import matplotlib.pyplot as plt
fig = plt.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))

plt.show()
해설 (1)

때로는 데이터를 플롯하기 전에 축 제한을 설정하고 싶을 때가 있습니다. 이 경우 '축' 또는 '축 하위 플롯' 개체의 '자동 크기 조정' 기능을 설정할 수 있습니다. 관심 있는 함수는 set_autoscale_on, set_autoscalex_onset_autoscaley_on입니다.

귀하의 경우, Y축의 한계를 고정하고 싶지만 데이터를 수용하기 위해 X축을 확장할 수 있도록 허용하고 싶습니다. 따라서 autoscaley_on 속성을 False로 변경하려고 합니다. 다음은 코드에서 FFT 하위 플롯 스니펫의 수정된 버전입니다:

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))
해설 (0)