我正在编程一个飞镖机器人。它是在机器人撞到板的地方计算出来的,现在我想用matplotlib来可视化。
我所拥有的:
显示BOT击中板的位置,并用轴和填充物进行规则的极坐标投影。
我需要的是:
将省道板设置为背景,并在顶部绘制X&Y(或分别为θ&r)。
我试过的:
将我的代码与接受的答案结合起来:Plot polar plot on top of image?
这就是我现在的代码:

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

图片如下:
python - 在matplotlib中将图像绘制为极坐标投影散点图的背景-LMLPHP
但结果并不十分令人满意:
python - 在matplotlib中将图像绘制为极坐标投影散点图的背景-LMLPHP
我做错什么了?

最佳答案

运行你在问题中显示的代码你应该得到一个警告
MatplotlibDeprecationWarning:使用与先前轴相同的参数添加轴当前会重用先前的实例。在将来的版本中,将始终创建并返回一个新实例。同时,可以通过向每个轴实例传递唯一的标签来抑制此警告,并确保将来的行为。
警告中已经给出了解决方案,即给轴一个唯一的标签,例如。

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

由此产生的飞镖板应该看起来像
python - 在matplotlib中将图像绘制为极坐标投影散点图的背景-LMLPHP

09-26 00:19