Comment puis-je définir la plage de l'axe y du deuxième sous-tracé sur, par exemple, [0,1000]? Le tracé FFT de mes données (une colonne dans un fichier texte) entraîne un pic (inf.?) De sorte que les données réelles ne sont pas visibles.
pylab.ylim([0,1000])
n'a aucun effet, malheureusement. Voici tout le script:
# 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()
D'autres améliorations sont également appréciées!
python
range
axis
matplotlib
Quelqu'un
la source
la source
Réponses:
Tel que trouvé dans http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx
Remarque: La commande doit être exécutée après le tracé!
la source
plot()
, puisylim()
puissavefig()
.L'utilisation d' objets axes est une excellente approche pour cela. Cela aide si vous souhaitez interagir avec plusieurs figures et sous-parcelles. Pour ajouter et manipuler directement les objets axes:
la source
Parfois, vous voulez vraiment définir les limites des axes avant de tracer les données. Dans ce cas, vous pouvez définir la fonction "mise à l'échelle automatique" de l' objet
Axes
ouAxesSubplot
. Les fonctions d'intérêt sontset_autoscale_on
,set_autoscalex_on
etset_autoscaley_on
.Dans votre cas, vous souhaitez figer les limites de l'axe y, mais permettre à l'axe x de se développer pour accueillir vos données. Par conséquent, vous souhaitez modifier la
autoscaley_on
propriété enFalse
. Voici une version modifiée de l'extrait de sous-tracé FFT de votre code:la source
Si vous connaissez l'axe exact que vous voulez, alors
pylab.ylim([0,1000])
fonctionne comme indiqué précédemment. Mais si vous souhaitez un axe plus flexible pour s'adapter à vos données exactes, comme je l'ai fait lorsque j'ai trouvé cette question, définissez la limite d'axe sur la longueur de votre ensemble de données. Si votre jeu de données est
fft
comme dans la question, ajoutez ceci après votre commande de tracé:length = (len(fft)) pylab.ylim([0,length])
la source
Si vous avez plusieurs sous-parcelles, c.-à-d.
Vous pouvez utiliser les mêmes limites y pour chacun d'eux. Il obtient les limites de y ax à partir de la première parcelle.
la source