Tracer des axes logarithmiques avec matplotlib en python
je veux tracer un graphique avec un axe logarithmique en utilisant matplotlib.
j'ai lu les docs, mais je n'arrive pas à trouver la syntaxe. Je sais que c'est probablement quelque chose de simple comme 'scale=linear'
dans les arguments d'intrigue, mais je ne semble pas pouvoir obtenir le droit
exemple de programme:
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()
6 réponses
vous pouvez utiliser la méthode Axes.set_yscale
. Cela vous permet de changer l'échelle après la création de l'objet Axes
. Cela vous permettrait également de construire un contrôle pour permettre à l'utilisateur de choisir la balance si vous en avez besoin.
la ligne pertinente à ajouter est la suivante:
ax.set_yscale('log')
Vous pouvez utiliser 'linear'
pour passer d'une échelle linéaire. Voici à quoi ressemblerait votre code:
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()
tout d'abord, il n'est pas très ordonné de mélanger le code pylab
et pyplot
. De plus, le style est préféré à l'utilisation du style .
voici un code légèrement nettoyé, en utilisant seulement pyplot
fonctions:
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()
la fonction pertinente est pyplot.yscale()
. Si vous utilisez la version orientée objet, remplacez-la par la méthode Axes.set_yscale()
. Rappelez - vous que vous pouvez également changer L'échelle de l'axe X, en utilisant pyplot.xscale()
(ou Axes.set_xscale()
).
cochez ma question Quelle est la différence entre ‘log’ et ‘symlog’? pour voir quelques exemples des échelles de graphe que matplotlib offre.
vous avez simplement besoin d'utiliser semilogy au lieu de parcelle:
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()
je sais que c'est légèrement hors sujet, puisque certains commentaires mentionnaient que la solution ax.set_yscale('log')
était" la plus gentille " j'ai pensé qu'une réfutation pourrait être due. Je ne recommande pas d'utiliser ax.set_yscale('log')
pour les histogrammes et les diagrammes à barres. Dans ma version (0.99.1.1), j'ai rencontré des problèmes de rendu - Je ne sais pas si ce problème est général. Cependant, bar et hist ont des arguments optionnels pour définir l'échelle en y à log, ce qui fonctionne très bien.
références: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist
si vous voulez changer la base du logarithme, il suffit d'ajouter:
plt.yscale('log',basey=2)
# where basex or basey are the bases of log
donc si vous utilisez simplement L'API non sophistiquée, comme je le fais souvent (je l'utilise beaucoup dans ipython), alors c'est tout simplement
yscale('log')
plot(...)
Espérons que cela aide quelqu'un à la recherche d'une réponse simple! :).