К моему удивлению, я не нашел вопроса о переполнении стека, специально посвященном этому вопросу.
Я хочу добавить художника, кружок, к моему графику matplotlib. Круг должен быть расположен с использованием координат данных, а также должен перемещаться вместе с данными, т.е. должно быть разрешено панорамирование. Но в то же время размер круга должен быть фиксированным в координатах отображения, и размер не должен изменяться с увеличением, то есть в пределах графика.
Мое первое предложение - использовать правильное преобразование, но, как кажется, преобразование применяется как к положению, так и к размеру объекта художника. Итак, как я могу отделить эти два параметра друг от друга, чтобы я мог достичь sh желаемого поведения?
Ответ @ gboffi предлагает использовать ScaledTransformation Matplotlib следующим образом:
import matplotlib.pyplot as plt
from matplotlib import transforms, patches
fig, ax = plt.subplots()
xdata, ydata = (0.2,), (0.5,)
ax.plot(xdata, ydata, "o")
ax.set_xlim((-0.05, 1.05)), ax.set_ylim(-0.05, 1.05)
ax.grid()
trans = (transforms.ScaledTranslation(xdata[0], ydata[0], ax.transData))
circle = patches.Circle((0, 0), 20, fill=None, transform=trans)
ax.add_patch(circle)
plt.show()
Это действительно работает, но требует определения положения круга в преобразовании и установки актуальных xy-координат круга на (0, 0). Поскольку я хочу время от времени изменять положение круга и у меня уже есть для этого набор кода, я ищу преобразование, которое обеспечивает такое же поведение, но позволяет мне указывать координаты xy в реальном объекте художника, а не в трансформация. Возможно ли это?
Этот вопрос не дублирует этот вопрос: Художники Matplotlib сохраняют тот же размер при увеличении? Связанный вопрос касается только масштабирования. Аспект панорамирования не затрагивается ни в связанном вопросе, ни в принятом ответе.