在matplotlib中绘制图像作为极性投影散点图的背景

时间:2018-05-01 15:20:51

标签: python matplotlib projection

我正在编写飞镖机器人。计算机器人击中电路板的位置,现在我想使用matplotlib将其可视化。

我拥有的: 显示机器人击中板的位置,带有轴和物体的规则极性投影。

我需要什么: 将飞镖靶设置为背景并在顶部绘制X& Y(或分别为theta& 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

图片如下: Dartboard

但结果并不令人满意: enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:2)

运行您在问题中显示的代码,您应该收到警告

  

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