Although I'm not sure if this is the best way, you can use matplotlib.ticker.FuncFormatter for this. For example, define the following function.
def my_formatter(x, pos): """Format 1 as 1, 0 as 0, and all values whose absolute values is between 0 and 1 without the leading "0." (eg, 0.7 is formatted as .7 and -0.4 is formatted as -.4).""" val_str = '{:g}'.format(x) if np.abs(x) > 0 and np.abs(x) < 1: return val_str.replace("0", "", 1) else: return val_str
Now you can use majorFormatter = FuncFormatter(my_formatter) to replace majorFormatter in the question.
Full example
Take a look at the full example.
from matplotlib import pyplot as plt from matplotlib.ticker import FuncFormatter import numpy as np def my_formatter(x, pos): """Format 1 as 1, 0 as 0, and all values whose absolute values is between 0 and 1 without the leading "0." (eg, 0.7 is formatted as .7 and -0.4 is formatted as -.4).""" val_str = '{:g}'.format(x) if np.abs(x) > 0 and np.abs(x) < 1: return val_str.replace("0", "", 1) else: return val_str
Running this code generates the following histogram.

Please note that the tick marks satisfy the conditions asked in the question.
David alber
source share