Я пишу функцию на основе matplotlib.pyplot, которая имитирует академические сюжеты, то есть с осями стрелок и метками, слегка смещенными от каждой стрелки.
Я бы хотел разместить некоторый текст, смещенный от наконечников стрелок (например, на 10 пикселей вверх или вправо), и этот сдвиг был бы постоянным, а именно независимым от соотношения сторон, subplots_adjust, xlim или даже размера окна рисунка.
С:
fig=plt.figure()
ax=fig.add_subplot(111)
Я пробовал до сих пор:
fig.text: просто плохо при изменении полей с помощью subplots_adjustax.text: неплохо, но смещение меняется при изменении размера окна...ax.annotate: никакой заметной разницы с ax.text...Две последние попытки основаны на смещении 10x10 пикселей, рассчитанном следующим образом:
ax.transAxes.inverted().transform((10,10)) - ax.transAxes.inverted().transform((0,0))
и clip_on=False (или annotation_clip=False) конечно.
Я также попытался посмотреть на преобразование, примененное к меткам тиков, поскольку их смещение от шипов ведет себя так, как я ищу, но я не нахожу деталей, стоящих за их CompositeGenericTransform.
Любая помощь будет оценена по достоинству.






matplotlib.transforms.offset_copy выполняет свою работу.
Но поскольку мне нужно, чтобы это смещение применялось к нескольким преобразованиям, я использовал другое решение (хотя и не сильно отличающееся).
Создадим два перевода:
# 0.1in translation along x axis
offsetX=matplotlib.transforms.ScaledTranslation(.1, 0, fig.dpi_scale_trans)
# 0.1in translation along y axis
offsetY=matplotlib.transforms.ScaledTranslation( 0, .1, fig.dpi_scale_trans)
Затем, чтобы разместить текст на 0,1 дюйма справа от оси x и над осью y:
ax.text( 1, 0, "X-axis", transform=ax.transAxes + offsetX )
ax.text( 0, 1, "Y-axis", transform=ax.transAxes + offsetY )
и некоторый текст справа и ниже (x0,y0) в координате данных:
ax.text( x0, y0, "Some text", ha='left', va='top', transform=ax.transData + offsetX - offsetY)