Jak mogę ustawić zakres osi y drugiego wykresu podrzędnego na np. [0,1000]? Wykres moich danych FFT (kolumna w pliku tekstowym) powoduje skok (inf.?), Dzięki czemu rzeczywiste dane nie są widoczne.
pylab.ylim([0,1000])
niestety nie działa. Oto cały skrypt:
# 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()
Inne ulepszenia są również mile widziane!
python
range
axis
matplotlib
ktoś
źródło
źródło
Odpowiedzi:
Jak znaleziono w http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx
Uwaga: polecenie należy wykonać po spisku!
źródło
plot()
,ylim()
a potemsavefig()
.Używanie obiektów osi jest do tego świetnym podejściem. Pomaga, jeśli chcesz wchodzić w interakcje z wieloma postaciami i wątkami. Aby bezpośrednio dodawać obiekty osi i nimi manipulować:
źródło
Czasami naprawdę chcesz ustawić limity osi przed wykreśleniem danych. W takim przypadku możesz ustawić funkcję „automatycznego skalowania” obiektu
Axes
lubAxesSubplot
. Funkcje interesujące sąset_autoscale_on
,set_autoscalex_on
iset_autoscaley_on
.W twoim przypadku chcesz zamrozić granice osi y, ale pozwól osi x rozwinąć się, aby pomieścić twoje dane. Dlatego chcesz zmienić
autoscaley_on
właściwość naFalse
. Oto zmodyfikowana wersja fragmentu podplotu FFT z Twojego kodu:źródło
Jeśli znasz dokładną oś, którą chcesz, to
pylab.ylim([0,1000])
działa zgodnie z wcześniejszą odpowiedzią. Ale jeśli chcesz, aby bardziej elastyczna oś pasowała do twoich dokładnych danych, tak jak to zrobiłem, kiedy znalazłem to pytanie, ustaw limit osi jako długość zestawu danych. Jeśli zestaw danych jest taki
fft
jak w pytaniu, dodaj go po poleceniu wydruku:length = (len(fft)) pylab.ylim([0,length])
źródło
Jeśli masz wiele wątków, tj
Możesz użyć tych samych limitów y dla wszystkich z nich. Z pierwszego wykresu pobiera granice osi.
źródło