¿Cómo puedo establecer el rango del eje y de la segunda subtrama en, por ejemplo, [0,1000]? El gráfico FFT de mis datos (una columna en un archivo de texto) da como resultado un pico (inf.?) Para que los datos reales no sean visibles.
pylab.ylim([0,1000])
no tiene efecto, desafortunadamente. Este es el guión completo:
# 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()
¡También se aprecian otras mejoras!
python
range
axis
matplotlib
alguien
fuente
fuente
Respuestas:
Como se encuentra en http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx
Nota: ¡El comando debe ejecutarse después de la trama!
fuente
plot()
, entoncesylim()
y luegosavefig()
.El uso de objetos de ejes es un gran enfoque para esto. Ayuda si quieres interactuar con múltiples figuras y subtramas. Para agregar y manipular los objetos de los ejes directamente:
fuente
A veces, realmente desea establecer los límites de los ejes antes de trazar los datos. En ese caso, puede configurar la función de "autoescalado" del objeto
Axes
uAxesSubplot
. Las funciones de interés sonset_autoscale_on
,set_autoscalex_on
yset_autoscaley_on
.En su caso, desea congelar los límites del eje y, pero permitir que el eje x se expanda para acomodar sus datos. Por lo tanto, desea cambiar la
autoscaley_on
propiedad aFalse
. Aquí hay una versión modificada del fragmento de subtrama FFT de su código:fuente
Si conoce el eje exacto que desea, entonces
pylab.ylim([0,1000])
funciona como se respondió anteriormente. Pero si desea un eje más flexible que se ajuste a sus datos exactos, como hice cuando encontré esta pregunta, establezca el límite del eje para que sea la longitud de su conjunto de datos. Si su conjunto de datos es
fft
como en la pregunta, agregue esto después de su comando de trazado:length = (len(fft)) pylab.ylim([0,length])
fuente
Si tiene varias subtramas, es decir
Puede usar los mismos límites y para todos ellos. Obtiene límites de y ax desde la primera trama.
fuente