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