Python, Matplotlib, subplot: Kaip nustatyti ašies diapazoną?

Kaip galiu nustatyti antrosios subploto y ašies diapazoną, pvz., [0,1000]? Mano duomenų (teksto failo stulpelio) FFT grafike atsiranda (inf.?) smaigalys, todėl tikrieji duomenys nėra matomi.

pylab.ylim([0,1000])

deja, neturi jokio poveikio. Tai yra visas scenarijus:

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

Kiti patobulinimai taip pat vertinami!

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

 pylab.ylim([0,1000])

Pastaba: komanda turi būti vykdoma po sklypo!

Komentarai (4)

Tam puikiai tinka ašių objektų naudojimas. Jis padeda, jei norite sąveikauti su daugeliu figūrų ir subplotų. Norėdami tiesiogiai pridėti ašių objektų ir jais manipuliuoti:

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

Kartais tikrai norisi nustatyti ašių ribas prieš braižant duomenis. Tokiu atveju galite nustatyti Axes arba AxesSubplot objekto funkciją "autoscaling". Naudojamos šios funkcijos: set_autoscale_on, set_autoscalex_on ir set_autoscaley_on.

Jūsų atveju norite įšaldyti y ašies' ribas, bet leisti x ašiai plėstis, kad ji atitiktų jūsų duomenis. Todėl norite pakeisti savybę autoscaley_on į False. Pateikiame pakeistą FFT subploto fragmentą iš jūsų kodo:

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