1"""
2===============
3Tick formatters
4===============
5
6Show the different tick formatters.
7"""
8
9import numpy as np
10import matplotlib.pyplot as plt
11import matplotlib.ticker as ticker
12
13
14# Setup a plot such that only the bottom spine is shown
15def setup(ax):
16    ax.spines['right'].set_color('none')
17    ax.spines['left'].set_color('none')
18    ax.yaxis.set_major_locator(ticker.NullLocator())
19    ax.spines['top'].set_color('none')
20    ax.xaxis.set_ticks_position('bottom')
21    ax.tick_params(which='major', width=1.00, length=5)
22    ax.tick_params(which='minor', width=0.75, length=2.5, labelsize=10)
23    ax.set_xlim(0, 5)
24    ax.set_ylim(0, 1)
25    ax.patch.set_alpha(0.0)
26
27
28fig = plt.figure(figsize=(8, 6))
29n = 7
30
31# Null formatter
32ax = fig.add_subplot(n, 1, 1)
33setup(ax)
34ax.xaxis.set_major_locator(ticker.MultipleLocator(1.00))
35ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.25))
36ax.xaxis.set_major_formatter(ticker.NullFormatter())
37ax.xaxis.set_minor_formatter(ticker.NullFormatter())
38ax.text(0.0, 0.1, "NullFormatter()", fontsize=16, transform=ax.transAxes)
39
40# Fixed formatter
41ax = fig.add_subplot(n, 1, 2)
42setup(ax)
43ax.xaxis.set_major_locator(ticker.MultipleLocator(1.0))
44ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.25))
45majors = ["", "0", "1", "2", "3", "4", "5"]
46ax.xaxis.set_major_formatter(ticker.FixedFormatter(majors))
47minors = [""] + ["%.2f" % (x-int(x)) if (x-int(x))
48                 else "" for x in np.arange(0, 5, 0.25)]
49ax.xaxis.set_minor_formatter(ticker.FixedFormatter(minors))
50ax.text(0.0, 0.1, "FixedFormatter(['', '0', '1', ...])",
51        fontsize=15, transform=ax.transAxes)
52
53
54# FuncFormatter can be used as a decorator
55@ticker.FuncFormatter
56def major_formatter(x, pos):
57    return "[%.2f]" % x
58
59
60ax = fig.add_subplot(n, 1, 3)
61setup(ax)
62ax.xaxis.set_major_locator(ticker.MultipleLocator(1.00))
63ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.25))
64ax.xaxis.set_major_formatter(major_formatter)
65ax.text(0.0, 0.1, 'FuncFormatter(lambda x, pos: "[%.2f]" % x)',
66        fontsize=15, transform=ax.transAxes)
67
68
69# FormatStr formatter
70ax = fig.add_subplot(n, 1, 4)
71setup(ax)
72ax.xaxis.set_major_locator(ticker.MultipleLocator(1.00))
73ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.25))
74ax.xaxis.set_major_formatter(ticker.FormatStrFormatter(">%d<"))
75ax.text(0.0, 0.1, "FormatStrFormatter('>%d<')",
76        fontsize=15, transform=ax.transAxes)
77
78# Scalar formatter
79ax = fig.add_subplot(n, 1, 5)
80setup(ax)
81ax.xaxis.set_major_locator(ticker.AutoLocator())
82ax.xaxis.set_minor_locator(ticker.AutoMinorLocator())
83ax.xaxis.set_major_formatter(ticker.ScalarFormatter(useMathText=True))
84ax.text(0.0, 0.1, "ScalarFormatter()", fontsize=15, transform=ax.transAxes)
85
86# StrMethod formatter
87ax = fig.add_subplot(n, 1, 6)
88setup(ax)
89ax.xaxis.set_major_locator(ticker.MultipleLocator(1.00))
90ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.25))
91ax.xaxis.set_major_formatter(ticker.StrMethodFormatter("{x}"))
92ax.text(0.0, 0.1, "StrMethodFormatter('{x}')",
93        fontsize=15, transform=ax.transAxes)
94
95# Percent formatter
96ax = fig.add_subplot(n, 1, 7)
97setup(ax)
98ax.xaxis.set_major_locator(ticker.MultipleLocator(1.00))
99ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.25))
100ax.xaxis.set_major_formatter(ticker.PercentFormatter(xmax=5))
101ax.text(0.0, 0.1, "PercentFormatter(xmax=5)",
102        fontsize=15, transform=ax.transAxes)
103
104# Push the top of the top axes outside the figure because we only show the
105# bottom spine.
106fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=1.05)
107
108plt.show()
109