Wie kann ich den Bereich der y-Achse des zweiten Subplots z. B. auf [0,1000] setzen? Die FFT-Darstellung meiner Daten (eine Spalte in einer Textdatei) ergibt einen (inf.?) Spike, so dass die eigentlichen Daten nicht sichtbar sind.
pylab.ylim([0,1000])
hat leider keinen Effekt. Dies ist das gesamte Skript:
# 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()
Andere Verbesserungen sind ebenfalls willkommen!
Wie in http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx zu finden.
pylab.ylim([0,1000])
Hinweis: Der Befehl muss nach dem Plot ausgeführt werden!
Die Verwendung von Achsen-Objekten ist hierfür ein guter Ansatz. Sie ist hilfreich, wenn Sie mit mehreren Figuren und Unterdiagrammen interagieren möchten. So fügen Sie die Achsenobjekte direkt hinzu und bearbeiten sie:
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()
Manchmal möchte man die Achsengrenzen festlegen, bevor man die Daten darstellt. In diesem Fall können Sie die "autoscaling" Funktion des Axes
oder AxesSubplot
Objektes einstellen. Die Funktionen von Interesse sind set_autoscale_on
, set_autoscalex_on
und set_autoscaley_on
.
In Ihrem Fall möchten Sie die Grenzen der y-Achse einfrieren, aber der x-Achse erlauben, sich zu erweitern, um Ihre Daten aufzunehmen. Daher möchten Sie die Eigenschaft autoscaley_on
auf False
ändern. Hier ist eine modifizierte Version des FFT-Subplot-Schnipsels aus Ihrem Code:
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))