Оси Matplotlib отмечаются с помощью локаторов и форматеров. Локатор сообщает оси, куда ставить галочки. Форматировщик ставит метку на эти галочки.
При использовании ax.set_xticks
вы создаете FixedLocator
, то есть набор фиксированных местоположений для отметки.
При использовании ax.set_xticklabels
вы создаете FixedFormatter
, то есть набор фиксированных строк для размещения по одному на галочках.
Когда вы устанавливаете новые тики с помощью ax.set_xticks(ticks2)
, вы не меняли форматер. Он по-прежнему будет форматировать первые три галочки со строками из своего списка.
Это значит: вам также нужно установить новые метки для измененного регистра.
например. через
ax.set_xticklabels(list("ABCDEFGHIJ"))
Теперь, если вы хотите иметь метки в других позициях, отличных от меток, это по сути означает, что вам нужны две пары локаторов и форматеров.
Одна пара локатор-форматер помечает кратные 3 и использует пустые строки в качестве меток. Другая пара отметит 5,15,25 и установит для них метки A, B, C.
import matplotlib.pyplot as plt
xs = [1, 4, 7, 11, 14, 17, 20, 23, 26, 29]
ys = [2.0, 1.667, 2.0, 0.333, 1.0, 0.667, 1.667, 1.0, 1.0, 1.0]
fig, ax = plt.subplots()
ax.plot(xs, ys)
# Major ticks
ticks2 = [x for x in range(0, 33, 3)]
ax.set_xticks(ticks2)
ax.set_xticklabels([])
ax.tick_params(axis='x', which="major", length=5)
# Minor ticks
ticks1 = [5.0, 15.0, 25.0]
labs = ['A', 'B', 'C']
ax.set_xticks(ticks1, minor=True)
ax.set_xticklabels(labs, minor=True)
ax.tick_params(axis='x', which="minor",length=0)
plt.show()
