Sometimes you have to show positive, zero and negative number in log scale. However you cannot take log of negative numbers and zero. But one could approximate it with a log transform modulus as stated here.
In Python with numpy:
from numpy import sign, abs, log10 import matplotlib.pyplot as plt # Data varies in several magnitudes and has both positive, zero and negative numbers x = [-10000,-1000,-100,-10,0,10,100,1000,10000] # log modulus transform x_log_modulus_transform= sign(x)*(log10(abs(x)+1)) f, ax = plt.subplots(2, sharex=True) ax.plot(x,'o') ax.margins(x=0.12, y=0.2) # for better visualization of datapoints at the end of axis ax.plot(x_log_modulus_transform,'o') ax.margins(x=0.12, y=0.2) # for better visualization of datapoints at the end of axis ax.set_ylabel('x') ax.set_ylabel('sign(x)*(log(|x|+1))') plt.show()