So stellen Sie den Achsenbereich des Subplots ein

Lesezeit: 3 Minuten

jemandes Benutzeravatar
jemand

Wie kann ich den y-Achsenbereich des zweiten Subplots auf zB einstellen [0,1000] ? 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 wirkung. 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!

  • Siehe auch stackoverflow.com/questions/15858192/…

    – tacaswell

    7. Juni 2015 um 18:54 Uhr

  • Beantwortet das deine Frage? Y-Achsen-Limit in Matplotlib einstellen

    – jacob

    24. März 2021 um 20:37 Uhr

jemandes Benutzeravatar
jemand

Du hast pylab.ylim:

pylab.ylim([0,1000])

Hinweis: Der Befehl muss nach dem Plot ausgeführt werden!

Aktualisierung 2021

Seit Von der Verwendung von Pylab wird jetzt von Matplotlib dringend abgeratensollten Sie stattdessen pyplot verwenden:

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

  • Wenn ich das mache, werden die Bilder auf den Kopf gestellt.

    – Ely

    6. Dezember 2011 um 1:52 Uhr

  • Wenn ich dies mit Hexbin verwende, wird ylim verwendet, nachdem plot() auf beiden Plots weißen Hintergrund freigelegt hat

    – Luchs

    19. Juni 2013 um 19:23 Uhr

  • WAS ist, wenn Sie nicht plot, sondern savefig verwenden?

    – Ben

    21. Dezember 2013 um 4:39 Uhr

  • Anruf plot()dann ylim() und dann savefig().

    – der echte Root-Benutzer

    15. April 2015 um 4:01 Uhr

  • in Nebenhandlungen ist es set_ylim().

    – Khaverim

    2. Juli 2021 um 19:43 Uhr

Benutzeravatar von ʀᴏʙ
ʀᴏʙ

Verwenden Achsenobjekte ist dafür ein toller Ansatz. Es hilft, wenn Sie mit mehreren Figuren und Nebenhandlungen interagieren möchten. Um die Achsenobjekte direkt hinzuzufügen und zu manipulieren:

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

  • Wie Rob vorschlägt, wird die OO-Schnittstelle in Matplotlib gegenüber der zustandsbasierten Pylab-Schnittstelle bevorzugt. “Obwohl viele Beispiele Pylab verwenden, wird es nicht mehr empfohlen. Für nicht-interaktives Plotten wird empfohlen, Pyplot zum Erstellen der Figuren und dann die OO-Schnittstelle zum Plotten zu verwenden.” matplotlib.org/faq/…

    – Bennett Brown

    8. Juli 2017 um 3:09 Uhr

Manchmal möchten Sie wirklich die Achsengrenzen festlegen Vor Sie zeichnen die Daten. In diesem Fall können Sie die „Autoscaling“-Funktion von einstellen Axes oder AxesSubplot Objekt. Die interessierenden Funktionen sind set_autoscale_on, set_autoscalex_onund set_autoscaley_on.

In Ihrem Fall möchten Sie die Grenzen der y-Achse einfrieren, die x-Achse jedoch erweitern, um Ihre Daten aufzunehmen. Daher möchten Sie die ändern autoscaley_on Eigentum zu False. Hier ist eine modifizierte Version des FFT-Subplot-Snippets 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))

Wenn Sie die genaue Achse kennen, die Sie wollen, dann

pylab.ylim([0,1000])

funktioniert wie zuvor beantwortet. Wenn Sie jedoch eine flexiblere Achse wünschen, die Ihren genauen Daten entspricht, wie ich es getan habe, als ich diese Frage gefunden habe, legen Sie die Achsenbegrenzung auf die Länge Ihres Datensatzes fest. Wenn Ihr Datensatz ist fft wie in der Frage, dann fügen Sie dies nach Ihrem Plot-Befehl hinzu:

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

Wenn Sie mehrere Nebenhandlungen haben, dh

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

Sie können für alle die gleichen y-Grenzen verwenden. Es erhält Grenzen von y ax aus dem ersten Diagramm.

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

1398890cookie-checkSo stellen Sie den Achsenbereich des Subplots ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy