Используя matplotlib 2.2.2 с gridspec в Python 3.6.5, я создал огромный сюжет для исследовательской работы с несколькими подзаговорами.Объекты осей хранятся в словаре с именем axes
.Этот словарь передается в функцию adjust_xticklabels()
, которая должна выровнять первый xticklabel немного вправо и последний xticklabel немного влево в каждом подзаговоре, так, чтобы xticklabels соседних графиков не мешали друг другу,Функция определяется как:
def adjust_xticklabels(axes, rate = 0.1):
for ax in axes.values():
left, right = ax.get_xlim() # get boundaries
dist = right-left # get distance
xtl = ax.get_xticklabels()
if len(xtl) > 1:
xtl[0].set_position((left + rate*dist, 0.)) # (x, y), shift right
xtl[-1].set_position((right - rate*dist, 0.)) # shift left
Вызов ее не имеет никакого эффекта.Конечно, я также попробовал это со смехотворно высокими значениями.Однако, это оказывает влияние в направлении y, например, в случае установки xtl[0].set_position((0.3, 0.3))
.
Простое воспроизведение:
ax = plt.subplot(111)
ax.plot(np.arange(10))
xtl = ax.get_xticklabels()
xtl[4].set_position((0.3, 0.3)) # wlog, 4 corresponds to 6

Я потратил много времени, пытаясь выяснить, является ли это особенность или ошибка.Я что-то пропустил или это ошибка?Есть ли другой способ сделать то же самое?