Zeichnen Sie logarithmische Achsen

Lesezeit: 3 Minuten

Ich möchte mit Matplotlib ein Diagramm mit einer logarithmischen Achse zeichnen.

Ich habe die Dokumentation gelesen, kann aber die Syntax nicht herausfinden. Ich weiß, dass es wahrscheinlich so etwas Einfaches ist 'scale=linear' in den Handlungsargumenten, aber ich kann es nicht richtig hinbekommen

Beispielprogramm:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color="blue", lw=2)
pylab.show()

Benutzeravatar von Mathieu
Matthias

Du kannst den … benutzen Axes.set_yscale Methode. Dadurch können Sie die Skala nach dem ändern Axes Objekt erstellt wird. Auf diese Weise könnten Sie auch ein Steuerelement erstellen, mit dem der Benutzer bei Bedarf die Skala auswählen kann.

Die relevante Zeile, die hinzugefügt werden muss, lautet:

ax.set_yscale('log')

Sie können verwenden 'linear' zurück zu einer linearen Skala wechseln. So würde Ihr Code aussehen:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color="blue", lw=2)

ax.set_yscale('log')

pylab.show()

Ergebnisdiagramm

  • Diese Methode ist nett, da sie mit allen Arten von Diagrammen (z. B. Histogrammen) funktioniert, nicht nur mit “Plot” (was semilogx/semilogy tut).

    – Tim Whitcomb

    26. Juli 2009 um 0:18 Uhr

  • Ich bin hierher gekommen, um herauszufinden, wie man eine Achse für Zweierpotenzen verwendet: pylab.gca().set_xscale(‘log’,basex=2)

    – zje

    12. April 2012 um 20:16 Uhr

  • Matplotlib hat semilogy(). Außerdem ist es einfacher, es direkt zu verwenden pyplot.yscale() als zu verwenden ax.set_yscale('log')da es keine Notwendigkeit gibt, die zu bekommen ax Objekt (das nicht immer sofort verfügbar ist).

    – Eric O. Lebigot

    28. Februar 2013 um 5:43 Uhr

  • Wenn Sie logarithmische Skalen auf beiden Achsen wünschen, versuchen Sie es loglog() oder nur auf der x-Achse versuchen semilogx()

    – Dreviko

    28. Juni 2013 um 7:00 Uhr

  • @EOL Ich würde das Gegenteil raten. Es ist besser, eine explizite zu verwenden ax Objekt, das zu verwenden pyplot was nur könnte auf die gewünschten Achsen anwenden.

    – tacaswell

    3. Mai 2016 um 4:08 Uhr

Benutzeravatar von Denilson Sá Maia
Denilson Sá Maia

Zunächst einmal ist es nicht sehr ordentlich zu mischen pylab und pyplot Code. Was ist mehr, Der Pyplot-Stil wird der Verwendung von Pylab vorgezogen.

Hier ist ein leicht aufgeräumter Code, der nur verwendet pyplot Funktionen:

from matplotlib import pyplot

a = [ pow(10,i) for i in range(10) ]

pyplot.subplot(2,1,1)
pyplot.plot(a, color="blue", lw=2)
pyplot.yscale('log')
pyplot.show()

Die entsprechende Funktion ist pyplot.yscale(). Wenn Sie die objektorientierte Version verwenden, ersetzen Sie sie durch die Methode Axes.set_yscale(). Denken Sie daran, dass Sie auch die Skalierung der X-Achse mit ändern können pyplot.xscale() (oder Axes.set_xscale()).

Überprüfen Sie meine Frage Was ist der Unterschied zwischen ‘log’ und ‘symlog’? , um einige Beispiele für die von matplotlib angebotenen Diagrammskalen zu sehen.

  • pyplot.semilogy() ist direkter.

    – Eric O. Lebigot

    28. Februar 2013 um 5:43 Uhr

Benutzeravatar von Dawid
David

Wenn Sie die Basis des Logarithmus ändern möchten, fügen Sie einfach hinzu:

plt.yscale('log',base=2) 

Vor Matplotlib 3.3 mussten Sie basex/basey als Basis für log verwenden

Sie müssen nur verwenden Semilogie statt Handlung:

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.semilogy(a, color="blue", lw=2)
show()

Ich weiß, dass dies etwas vom Thema abweicht, da einige Kommentare das erwähnt haben ax.set_yscale('log') Als “schönste” Lösung dachte ich, eine Widerlegung könnte fällig sein. Ich würde die Verwendung nicht empfehlen ax.set_yscale('log') für Histogramme und Balkendiagramme. In meiner Version (0.99.1.1) stoße ich auf einige Rendering-Probleme – nicht sicher, wie allgemein dieses Problem ist. Sowohl bar als auch hist haben jedoch optionale Argumente, um die y-Skala auf log zu setzen, was gut funktioniert.

Verweise:
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist

Benutzeravatar von crazy2be
verrückt2be

Wenn Sie also einfach die einfache API verwenden, wie ich es oft tue (ich verwende es häufig in Ipython), dann ist dies einfach

yscale('log')
plot(...)

Hoffe, das hilft jemandem, der nach einer einfachen Antwort sucht! :).

1430630cookie-checkZeichnen Sie logarithmische Achsen

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

Privacy policy