Aligning y-ticks to the left

Tested in python 3.11.2, matplotlib 3.7.1

You will just need to add a pad. See matplotlib ticks position relative to axis

yax = ax.get_yaxis()
yax.set_tick_params(pad=pad)

matplotlib.axis.Axis.set_tick_params

To do your figuring of what the pad should be:

import numpy as np
import matplotlib.pyplot as plt

ticks = ['Lorem ipsum dolor sit amet, consectetur adipisicin', 'g elit, sed do', 'eiusmod tempor incididunt ut labo', 're et dolore magna ali', 'qua. Ut en', 'im ad minim veniam, quis nostr', 'ud exercitation ullamco labo', 'ris nisi ut aliquip ex ea c', 'ommodo co', 'nsequat. Duis aute irure dolor in rep']
data = [5, 1, 2, 4, 1, 4, 5, 2, 1, 5]
ind = np.arange(len(data))
fig = plt.figure(tight_layout=True) # need tight_layout to make everything fit
ax = plt.subplot(111)
ax.barh(ind, data, 0.999)
ax.set_yticks(ind + 0.5)
r = ax.set_yticklabels(ticks, ha="left")
fig.set_size_inches(12, 8, forward=True) 
# re-size first, the shift needs to be in display units

yax = ax.get_yaxis()
# find the maximum width of the label on the major ticks
pad = max(T.label1.get_window_extent().width for T in yax.majorTicks)

yax.set_tick_params(pad=pad)
plt.show()

enter image description here

Leave a Comment