real - graficar matrices en python
Dibuje ejes logarítmicos con matplotlib en python (6)
Quiero trazar una gráfica con un eje logarítmico usando matplotlib.
He estado leyendo los documentos, pero no puedo entender la sintaxis. Sé que probablemente sea algo simple como ''scale=linear''
en los argumentos de la trama, pero parece que no puedo hacerlo bien
Programa de muestra:
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()
En primer lugar, no es muy ordenado mezclar código pylab
y pylab
. Además, se prefiere el estilo pyplot sobre el uso de pylab .
Aquí hay un código que se ha limpiado ligeramente, utilizando solo pyplot
funciones de la pyplot
:
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 función relevante es pyplot.yscale()
. Si utiliza la versión orientada a objetos, sustitúyala por el método Axes.set_yscale . Recuerda que también puedes cambiar la escala del eje X, usando pyplot.xscale()
(o Axes.set_xscale()
).
Compruebe mi pregunta ¿Cuál es la diferencia entre ''log'' y ''symlog''? para ver algunos ejemplos de las escalas gráficas que ofrece matplotlib.
Entonces, si simplemente estás usando la API poco sofisticada, como a menudo lo estoy (lo uso mucho en ipython), entonces esto es simplemente
yscale(''log'')
plot(...)
Espero que esto ayude a alguien que busca una respuesta simple! :).
Puedes usar el método Axes.set_yscale
. Eso le permite cambiar la escala después de crear el objeto Axes
. Eso también le permitiría construir un control para permitir que el usuario elija la escala si lo necesita.
La línea relevante para agregar es:
ax.set_yscale(''log'')
Puede usar ''linear''
para volver a la escala lineal. Así es como se vería tu código:
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()
Sé que esto es un poco fuera de tema, ya que algunos comentarios mencionaron que ax.set_yscale(''log'')
es la solución más "bonita" que pensé que se debía una refutación. No recomendaría el uso de ax.set_yscale(''log'')
para histogramas y gráficos de barras. En mi versión (0.99.1.1) me encuentro con algunos problemas de renderizado, no estoy seguro de cuán general es este problema. Sin embargo, tanto bar como hist tienen argumentos opcionales para configurar la escala y en el registro, que funcionan bien.
referencias: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist
Si desea cambiar la base de logaritmo, simplemente agregue:
plt.yscale(''log'',basey=2)
# where basex or basey are the bases of log
Simplemente necesitas usar la semilogy lugar de la trama:
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()