it-swarm.com.de

Plotten Sie logarithmische Achsen mit matplotlib in python

Ich möchte mit matplotlib einen Graphen mit einer logarithmischen Achse zeichnen.

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

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

Sie können die Methode Axes.set_yscale verwenden. Auf diese Weise können Sie den Maßstab ändern, nachdem das Objekt Axes erstellt wurde. Auf diese Weise können Sie auch ein Steuerelement erstellen, mit dem der Benutzer bei Bedarf die Waage auswählen kann.

Die relevante Zeile zum Hinzufügen ist:

_ax.set_yscale('log')
_

Sie können _'linear'_ verwenden, um zu einer linearen Skala zurückzukehren. 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

320
Mathieu

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

Hier ist ein leicht bereinigter Code, der nur pyplot Funktionen verwendet:

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 relevante Funktion ist pyplot.yscale() . Wenn Sie die objektorientierte Version verwenden, ersetzen Sie sie durch die Methode Axes.set_yscale() . Denken Sie daran, dass Sie die Skalierung der X-Achse auch mit pyplot.xscale() (oder Axes.set_xscale() ) ändern können.

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

262

Sie müssen einfach Semilogie anstelle von plot verwenden:

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()
63
Scott McCammon

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

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log
20
Dawid

Ich weiß, dass dies ein wenig vom Thema abweicht, da in einigen Kommentaren die ax.set_yscale('log') als "netteste" Lösung erwähnt wurde und ich dachte, dass eine Widerlegung fällig sein könnte. Ich würde nicht empfehlen, ax.set_yscale('log') für Histogramme und Balkendiagramme zu verwenden. In meiner Version (0.99.1.1) habe ich einige Rendering-Probleme - ich bin mir 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.

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

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

8
user3465408

Wenn Sie also einfach die unkomplizierte API verwenden, wie ich es oft bin (ich verwende sie häufig in ipython), dann ist dies einfach

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

Hoffe das hilft jemandem bei der Suche nach einer einfachen Antwort! :).

5
crazy2be