преобразовать пиксельные координаты в data-координаты в matplotlib - PullRequest
0 голосов
/ 17 января 2020

Я создаю сюжет с matplotlib.pyplot. Для этого изображения мне нужна функция, которая отображает пиксельные координаты на координаты данных (для взаимодействия с пользователем в другой GUI -системе вне python). Я попробовал функцию ax.transData.inverted().transform(x), так как она отображает координаты дисплея в координаты данных. Но числа, которые я получаю, имеют смещение примерно в 23 пикселя в x-направлении. Я прошел этот урок , но не смог найти ничего по этой проблеме.

Я также попробовал этот код из stackoverflow, где напечатанные x-координаты имеют смещение 25 пикселей. Я мог видеть, что, может быть, область слева от оси Y там не включена? Мне определенно нужно, чтобы это было включено. На прилагаемой картинке я сравниваю, что дает код из stackoverflow с тем, что MS paint сообщает мне о x-координате красной точки. Они не одинаковы.

спасибо! Datapoints from the code example

1 Ответ

1 голос
/ 19 января 2020

Как прокомментировано, ax.transData.inverted().transform(x) действительно дает вам координаты данных x, определенные в пикселях.

Итак, мы запускаем

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
points, = ax.plot(range(10), 'ro')
ax.axis([-1, 10, -1, 10])
fig.savefig("test.png")

, открываем сохраненную картинку в Irfanview и отмечаем точку в (0,0).

enter image description here

Как видно на изображении, оно составляет (126, 86) пикселей. Итак, подключив этот кортеж

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
points, = ax.plot(range(10), 'ro')
ax.axis([-1, 10, -1, 10])

x = 126, 86
point = ax.transData.inverted().transform(x)
print(point)

, мы получим

[ 0.02016129 -0.01190476]

, который настолько близок к (0,0), насколько вы можете получить, учитывая, что разрешение пикселей составляет

x2 = 125, 85
point2 = ax.transData.inverted().transform(x2)
print(point - point2)

[0.02217742 0.0297619 ]

и, следовательно, больше, чем полученные цифры.

Возможно, это не ответит на вопрос, но это все, что может, возможно, сказать здесь, с информацией из рассматриваемого вопроса.

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