yscale pyplot plots log grafico grafica python matplotlib scale logarithm

python - pyplot - ¿Cuál es la diferencia entre ''log'' y ''symlog''?



plt scale python (2)

Finalmente encontré algo de tiempo para hacer algunos experimentos con el fin de entender la diferencia entre ellos. Esto es lo que descubrí:

  • log solo permite valores positivos y le permite elegir cómo manejar los negativos ( mask o clip ).
  • symlog significa registro simétrico , y permite valores positivos y negativos.
  • symlog permite establecer un rango alrededor de cero dentro de la trama, será lineal en lugar de logarítmico.

Creo que todo será mucho más fácil de entender con gráficos y ejemplos, así que intentémoslos:

import numpy from matplotlib import pyplot # Enable interactive mode pyplot.ion() # Draw the grid lines pyplot.grid(True) # Numbers from -50 to 50, with 0.1 as step xdomain = numpy.arange(-50,50, 0.1) # Plots a simple linear function ''f(x) = x'' pyplot.plot(xdomain, xdomain) # Plots ''sin(x)'' pyplot.plot(xdomain, numpy.sin(xdomain)) # ''linear'' is the default mode, so this next line is redundant: pyplot.xscale(''linear'')

# How to treat negative values? # ''mask'' will treat negative values as invalid # ''mask'' is the default, so the next two lines are equivalent pyplot.xscale(''log'') pyplot.xscale(''log'', nonposx=''mask'')

# ''clip'' will map all negative values a very small positive one pyplot.xscale(''log'', nonposx=''clip'')

# ''symlog'' scaling, however, handles negative values nicely pyplot.xscale(''symlog'')

# And you can even set a linear range around zero pyplot.xscale(''symlog'', linthreshx=20)

Solo para completar, he usado el siguiente código para guardar cada figura:

# Default dpi is 80 pyplot.savefig(''matplotlib_xscale_linear.png'', dpi=50, bbox_inches=''tight'')

Recuerde que puede cambiar el tamaño de la figura usando:

fig = pyplot.gcf() fig.set_size_inches([4., 3.]) # Default size: [8., 6.]

(Si no está seguro de que responda mi propia pregunta, lea this )

En matplotlib , puedo establecer la escala del eje usando pyplot.xscale() o Axes.set_xscale() . Ambas funciones aceptan tres escalas diferentes: ''linear'' | ''log'' | ''symlog'' .

¿Cuál es la diferencia entre ''log'' y ''symlog'' ? En una simple prueba que hice, ambos parecían exactamente iguales.

Sé que la documentación dice que aceptan diferentes parámetros, pero todavía no entiendo la diferencia entre ellos. ¿Alguien puede explicarlo? ¡La respuesta será la mejor si tiene algún código de muestra y gráficos! (también: ¿de dónde viene el nombre ''symlog''?)


symlog es como el registro, pero le permite definir un rango de valores cercanos a cero dentro del cual el trazado es lineal, para evitar que el trazado vaya al infinito alrededor de cero.

Desde Axes.set_xscale()

En un gráfico de registro, nunca puede tener un valor cero, y si tiene un valor que se acerca a cero, se disparará desde el fondo de su gráfico (infinitamente hacia abajo) porque cuando toma "registro (acercándose a cero)" obtener "acercarse al infinito negativo".

symlog lo ayudaría en situaciones en las que desea tener un gráfico de registro, pero cuando el valor a veces puede bajar hacia cero o hacia cero, pero aún desea poder mostrar eso en el gráfico de una manera significativa. Si necesita symlog, lo sabría.