Skip to content

Setting Ticks and Tick Labels

Matplotlib - Setting Ticks and Tick Labels

Section titled “Matplotlib - Setting Ticks and Tick Labels”

Ticks are the markers along the axes (x-axis and y-axis) that indicate specific data points or intervals. Tick labels are the text strings associated with these ticks.

While Matplotlib’s default tick locators and formatters often produce good results automatically, you frequently need to customize the tick positions and labels for clarity, specific emphasis, or non-numeric labeling.

Use the ax.set_xticks() and ax.set_yticks() methods to explicitly set the locations where ticks should appear on the respective axes. These methods take a list or array of numerical positions.

# Example: Set x-axis ticks at positions 0, pi, 2*pi
ax.set_xticks([0, np.pi, 2 * np.pi])
# Example: Set y-axis ticks from -1 to 1 in steps of 0.5
ax.set_yticks(np.arange(-1, 1.1, 0.5))

Use the ax.set_xticklabels() and ax.set_yticklabels() methods to provide custom labels for the ticks you’ve set (or for the default ticks if locations aren’t set manually). These methods take a list of strings.

Important: When setting custom labels, you should usually set the tick locations first using set_xticks/set_yticks. The list of labels provided to set_xticklabels/set_yticklabels corresponds sequentially to the list of tick locations.

# Example: Set custom labels for the previously set x-ticks
ax.set_xticklabels(['Start', 'Middle', 'End'])
# Example: Format y-tick labels as percentages
y_tick_locations = ax.get_yticks() # Get current tick locations
y_tick_labels = [f'{val * 100:.0f}%' for val in y_tick_locations]
ax.set_yticklabels(y_tick_labels)

Example: Custom Ticks and Labels for Sine Wave

Section titled “Example: Custom Ticks and Labels for Sine Wave”
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(8, 5))
ax.plot(x, y)
ax.set_title('Sine Wave with Custom Ticks/Labels')
ax.set_xlabel('Angle (Radians)')
ax.set_ylabel('Value')
# --- Customize Ticks and Labels ---
# 1. Set X-tick locations
x_tick_locations = [0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi]
ax.set_xticks(x_tick_locations)
# 2. Set corresponding X-tick labels using LaTeX for pi symbol
x_tick_labels = ['0', r'$\pi/2$', r'$\pi$', r'$3\pi/2$', r'$2\pi$']
ax.set_xticklabels(x_tick_labels, fontsize=12)
# 3. Set Y-tick locations
y_tick_locations = [-1, 0, 1]
ax.set_yticks(y_tick_locations)
# 4. Set corresponding Y-tick labels
y_tick_labels = ['Min (-1)', 'Zero (0)', 'Max (+1)']
ax.set_yticklabels(y_tick_labels)
# --- Optional: Customize tick appearance ---
ax.tick_params(axis='x', direction='in', length=6, width=1, colors='blue')
ax.tick_params(axis='y', labelrotation=45) # Rotate y-labels
ax.grid(True, linestyle='--')
plt.tight_layout()
plt.show()

This code generates a sine wave plot where the x-axis ticks are placed at multiples of pi/2 and labeled using mathematical notation (including the pi symbol rendered via LaTeX). The y-axis ticks are placed at -1, 0, and 1 and given descriptive string labels. Tick parameters like direction, size, color, and label rotation are also customized using ax.tick_params().

For more complex scenarios (e.g., logarithmic scales, date axes, automatically finding nice tick intervals), Matplotlib provides a powerful system of Locators (which determine tick positions) and Formatters (which determine label strings). These are found in the matplotlib.ticker module.

You can assign specific Locator and Formatter objects to an axis:

from matplotlib.ticker import MultipleLocator, FormatStrFormatter, AutoMinorLocator
# Set major ticks every 1 unit on x-axis
ax.xaxis.set_major_locator(MultipleLocator(1))
# Format major x-ticks as floats with 1 decimal place
ax.xaxis.set_major_formatter(FormatStrFormatter('%.1f'))
# Add minor ticks automatically
ax.xaxis.set_minor_locator(AutoMinorLocator(5)) # 5 minor intervals between major ticks
# Customize grid for major and minor ticks
ax.grid(which='major', linestyle='-', linewidth='0.5', color='red')
ax.grid(which='minor', linestyle=':', linewidth='0.5', color='black')

Mastering ticks, locators, and formatters gives you complete control over how your axes convey information.