Ho finalmente trovato il tempo per fare alcuni esperimenti per capire la differenza tra loro. Ecco cosa ho scoperto:
log
consente solo valori positivi e consente di scegliere come gestire quelli negativi ( mask
o clip
).
symlog
significa log simmetrico e consente valori positivi e negativi.
symlog
permette di impostare un range intorno allo zero all'interno del grafico sarà lineare invece che logaritmico.
Penso che tutto diventerà molto più facile da capire con grafici ed esempi, quindi proviamoli:
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 per completezza, ho usato il seguente codice per salvare ogni figura:
# Default dpi is 80
pyplot.savefig('matplotlib_xscale_linear.png', dpi=50, bbox_inches='tight')
Ricorda che puoi modificare la dimensione della figura utilizzando:
fig = pyplot.gcf()
fig.set_size_inches([4., 3.])
# Default size: [8., 6.]
(Se non sei sicuro che risponda alla mia domanda, leggi questo )