Cómo establecer el rango del eje de la subparcela

3 minutos de lectura

el avatar de usuario de alguien
alguien

¿Cómo puedo configurar el rango del eje y de la segunda subtrama, 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 ningún efecto, por desgracia. 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 agradecen otras mejoras!

  • Consulte también stackoverflow.com/questions/15858192/…

    – tacoswell

    7 junio 2015 a las 18:54

  • ¿Responde esto a tu pregunta? establecer el límite del eje y en matplotlib

    – iacob

    24/03/2021 a las 20:37

el avatar de usuario de alguien
alguien

Tú tienes pylab.ylim:

pylab.ylim([0,1000])

Nota: ¡El comando debe ejecutarse después de la trama!

Actualización 2021

Ya que el uso de pylab ahora está fuertemente desaconsejado por matplotlibdeberías usar pyplot en su lugar:

from matplotlib import pyplot as plt
plt.ylim(0, 100) 
#corresponding function for the x-axis
plt.xlim(1, 1000)

  • Cada vez que hago esto, voltea las imágenes al revés.

    – ely

    6 de diciembre de 2011 a las 1:52

  • si uso esto con hexbin, usa ylim después de plot() expone el fondo blanco en ambas parcelas

    – linceide

    19 de junio de 2013 a las 19:23

  • ¿Qué pasa si no estás usando plot, sino savefig?

    – ben

    21 de diciembre de 2013 a las 4:39

  • Llamar plot()después ylim() y entonces savefig().

    – therealrootuser

    15 de abril de 2015 a las 4:01

  • en subtramas es set_ylim().

    – javerim

    2 de julio de 2021 a las 19:43

Avatar de usuario de ʀᴏʙ
ʀᴏʙ

Usando hachas objetos es un gran enfoque para esto. Ayuda si desea interactuar con múltiples figuras y subtramas. Para agregar y manipular los objetos de ejes directamente:

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

  • Como sugiere Rob, la interfaz OO en matplotlib es preferible a la interfaz pylab basada en estado. “Aunque muchos ejemplos usan pylab, ya no se recomienda. Para el trazado no interactivo, se sugiere usar pyplot para crear las figuras y luego la interfaz OO para el trazado”. matplotlib.org/faq/…

    – Bennet Brown

    8 de julio de 2017 a las 3:09

A veces realmente quieres establecer los límites de los ejes. antes de usted traza los datos. En ese caso, puede configurar la función de “autoescalado” de la Axes o AxesSubplot objeto. Las funciones de interés son set_autoscale_on, set_autoscalex_ony set_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 el autoscaley_on propiedad a False. Aquí hay una versión modificada del fragmento de subparcela FFT de su código:

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

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, luego agregue esto después de su comando de trama:

length = (len(fft))
pylab.ylim([0,length])

Si tiene varias subtramas, es decir,

fig, ax = plt.subplots(4, 2)

Puede usar los mismos límites y para todos ellos. Obtiene los límites del eje y del primer gráfico.

plt.setp(ax, ylim=ax[0,0].get_ylim())

¿Ha sido útil esta solución?