Matplotlib Artist: определите положение в координатах данных, но размер в координатах отображения - PullRequest
0 голосов
/ 03 августа 2020

К моему удивлению, я не нашел вопроса о переполнении стека, специально посвященном этому вопросу.

Я хочу добавить художника, кружок, к моему графику 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 сохраняют тот же размер при увеличении? Связанный вопрос касается только масштабирования. Аспект панорамирования не затрагивается ни в связанном вопросе, ни в принятом ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...