Нанесение изображения в качестве фона поля рассеяния полярной проекции в matplotlib - PullRequest
0 голосов
/ 01 мая 2018

Я программирую дартс-бота. Подсчитано, где бот попал на доску, и теперь я хочу визуализировать это с помощью matplotlib.

Что у меня есть: Отображение позиции, где бот ударяется о доску, с правильной полярной проекцией с осью и прочим.

Что мне нужно: Установка дартс в качестве фона и нанесение X & Y (или тета & r соответственно) сверху.

Что я пробовал: Присоединение к моему коду вместе с принятым ответом: Построить полярный график в верхней части изображения?

Вот так выглядит мой код:

import numpy as np
from matplotlib import pyplot as plt

# throw three darts:
rad = np.asarray([10000, 11000, 9400]) # consider these as distances from bull's eye in 10*µm
azi = np.asarray([352, 0, 10]) # in degrees
azi = np.deg2rad(azi) # conversion into radians

fig = plt.gcf()

axes_coords = [0, 0, 1, 1] # plotting full width and height

ax_polar = fig.add_axes(axes_coords, projection='polar')
ax_polar.patch.set_alpha(0)
ax_polar.scatter(azi, rad)
ax_polar.set_ylim(0, 17000)
ax_polar.set_xlim(0, 2*np.pi)
ax_polar.set_theta_offset(0.5*np.pi) # 0° should be on top, not right
ax_polar.set_theta_direction(direction=-1) # clockwise

plt.show()

Приведенный выше код работает нормально. Если вы запустите его, вы увидите, что бот ударил рядом с полем T20, которое расположено прямо над яблоком.

Теперь, если я хочу добавить изображение, я вставляю следующий код перед plt.show()

pic = plt.imread('Board_cd.png')
ax_image = fig.add_axes(axes_coords)
ax_image.imshow(pic, alpha=.5)
ax_image.axis('off')  # don't show the axes ticks/lines/etc. associated with the image

Картинка выглядит так: Dartboard

Но результат не очень удовлетворительный: enter image description here

Что я делаю не так?

1 Ответ

0 голосов
/ 01 мая 2018

Запустив код, который вы показываете в вопросе, вы должны получить предупреждение

MatplotlibDeprecationWarning: добавление осей с использованием тех же аргументов, что и у предыдущих осей, в настоящее время повторно использует более ранний экземпляр. В будущей версии новый экземпляр всегда будет создаваться и возвращаться. Между тем, это предупреждение можно подавить и обеспечить дальнейшее поведение, передав уникальную метку каждому экземпляру осей.

Решение уже указано в предупреждении, а именно дать осям уникальную метку, например,

ax_polar = fig.add_axes(axes_coords, projection='polar', label="ax polar")
# ...
ax_image = fig.add_axes(axes_coords, label="ax image")

Получившаяся доска для дротиков должна выглядеть как

enter image description here

...