Wie kann ich den Bereich der y-Achse des zweiten Unterplots auf z. B. [0,1000] einstellen? Das FFT-Diagramm meiner Daten (eine Spalte in einer Textdatei) führt zu einer (inf.?) Spitze, sodass die tatsächlichen Daten nicht sichtbar sind.
pylab.ylim([0,1000])
hat leider keine auswirkung. Das ist das ganze 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 werden ebenfalls geschätzt!
python
range
axis
matplotlib
jemand
quelle
quelle
Antworten:
Wie in http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx zu finden
Hinweis: Der Befehl muss nach dem Plot ausgeführt werden!
quelle
plot()
dannylim()
und dann ansavefig()
.Die Verwendung von Achsenobjekten ist hierfür ein guter Ansatz. Es ist hilfreich, wenn Sie mit mehreren Figuren und Nebenhandlungen interagieren möchten. So fügen Sie die Achsenobjekte direkt hinzu und bearbeiten sie:
quelle
Manchmal möchten Sie wirklich die Achsengrenzen festlegen, bevor Sie die Daten zeichnen. In diesem Fall können Sie die Funktion "Autoscaling" für das Objekt
Axes
oder festlegenAxesSubplot
. Die Funktionen von Interesse sindset_autoscale_on
,set_autoscalex_on
undset_autoscaley_on
.In Ihrem Fall möchten Sie die Grenzen der y-Achse einfrieren, aber die x-Achse erweitern lassen, um Ihre Daten aufzunehmen. Daher möchten Sie die
autoscaley_on
Eigenschaft in ändernFalse
. Hier ist eine modifizierte Version des FFT-Subplot-Snippets aus Ihrem Code:quelle
Wenn Sie die gewünschte Achse genau kennen, dann
pylab.ylim([0,1000])
funktioniert wie zuvor beantwortet. Wenn Sie jedoch eine flexiblere Achse wünschen, die genau zu Ihren Daten passt, wie ich es bei der Beantwortung dieser Frage getan habe, legen Sie die Achsenbegrenzung auf die Länge Ihres Datensatzes fest. Wenn Ihr Datensatz dem
fft
in der Frage entspricht, fügen Sie diesen nach Ihrem Plotbefehl hinzu:length = (len(fft)) pylab.ylim([0,length])
quelle
Wenn Sie mehrere Nebenhandlungen haben, z
Sie können für alle die gleichen y-Grenzwerte verwenden. Es erhält Grenzen von y ax aus dem ersten Plot.
quelle