Cuối cùng tôi đã tìm được thời gian để làm một số thí nghiệm để hiểu sự khác biệt giữa chúng. Đây là những gì tôi đã khám phá ra:
log
chỉ cho phép các giá trị dương và cho phép bạn chọn cách xử lý ( mask
hoặc clip
) các giá trị âm .
symlog
nghĩa là log đối xứng , và cho phép các giá trị âm và dương.
symlog
cho phép thiết lập một phạm vi xung quanh 0 trong biểu đồ sẽ là tuyến tính thay vì lôgarit.
Tôi nghĩ mọi thứ sẽ dễ hiểu hơn rất nhiều với đồ họa và ví dụ, vì vậy hãy thử chúng:
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)
Chỉ để hoàn thiện, tôi đã sử dụng đoạn mã sau để lưu từng hình:
# Default dpi is 80
pyplot.savefig('matplotlib_xscale_linear.png', dpi=50, bbox_inches='tight')
Hãy nhớ rằng bạn có thể thay đổi kích thước hình bằng cách sử dụng:
fig = pyplot.gcf()
fig.set_size_inches([4., 3.])
# Default size: [8., 6.]
(Nếu bạn không chắc về việc tôi trả lời câu hỏi của chính mình, hãy đọc phần này )