582 Stimmen

Plotten logarithmischer Achsen mit matplotlib in Python

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

Ich habe die Dokumentation gelesen, kann aber die Syntax nicht entschlüsseln. Ich weiß, dass es wahrscheinlich etwas Einfaches ist wie 'scale=linear' in den Handlungsargumenten, aber ich scheine es nicht richtig hinzubekommen

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

670voto

Mathieu Punkte 6105

Sie können die Axes.set_yscale Methode. Damit können Sie die Skala nach der Axes Objekt erstellt wird. Dies würde es Ihnen auch ermöglichen, ein Steuerelement zu erstellen, mit dem der Benutzer die Skala auswählen kann, falls dies erforderlich ist.

Die entsprechende Zeile muss hinzugefügt werden:

ax.set_yscale('log')

Sie können verwenden 'linear' um wieder auf eine lineare Skala umzuschalten. 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()

result chart

400voto

Denilson Sá Maia Punkte 43844

Zunächst einmal ist es nicht sehr ordentlich, die pylab y pyplot Code. Und mehr noch, Der Stil von pyplot ist der Verwendung von pylab vorzuziehen. .

Hier ist ein leicht bereinigter Code, der nur 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 lautet pyplot.yscale() . Wenn Sie die objektorientierte Version verwenden, ersetzen Sie sie durch die Methode Axes.set_yscale() . Denken Sie daran, dass Sie auch den Maßstab der X-Achse ändern können, indem Sie pyplot.xscale() (oder Axes.set_xscale() ).

Prüfen Sie meine Frage Was ist der Unterschied zwischen "log" und "symlog"? um einige Beispiele für die von matplotlib angebotenen Diagrammskalen zu sehen.

111voto

Dawid Punkte 1020

Wenn Sie die Basis des Logarithmus ändern wollen, fügen Sie einfach hinzu:

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

Vor Matplotlib 3.3 mussten Sie basex/basey als Basis von log verwenden

78voto

Scott McCammon Punkte 1837

Sie müssen lediglich Folgendes verwenden semilogy anstelle der 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()

13voto

user3465408 Punkte 159

Ich weiß, dass dies etwas vom Thema abweicht, da in einigen Kommentaren die ax.set_yscale('log') um die "netteste" Lösung zu sein, dachte ich, dass eine Gegendarstellung fällig sein könnte. Ich würde nicht empfehlen, die ax.set_yscale('log') für Histogramme und Balkendiagramme. In meiner Version (0.99.1.1) habe ich einige Rendering-Probleme - ich weiß nicht, wie allgemein dieses Problem ist. Aber sowohl bar und hist hat optionale Argumente, um die y-Skala zu log, die gut funktionieren.

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X