我有一个来自超声波传感器的波形,基于我计算出的半径(距传感器的物距),我想用matplotlib绘制色图上的半径,以突出对象的所有可能位置在传感器的视野中 - 应该产生具有圆圈的色图,其上具有计算的半径,因此在该半径(值)处具有更大强度的结果具有更亮的颜色。
基于测量的半径:[0。3.434 6.868 10.302] 和价值观:[1,5,1,3] 这张图将说明我想要的东西(对于糟糕的gimp技能,这些应该是圈子):
在现实生活中,色彩图应该更多"波动"没有这种完美定义的窄圈。
这里的代码只给了我一张空白的图表:
def plot_2D_heatmap(self, radiuses, values):
print(radiuses)
#[ 0. 3.434 6.868 10.302]
print(values)
#[1, 5, 1, 3]
#calculate the x and y coordinates in mm for each measured radius and angle
angles = np.linspace(0, 2*np.pi, 36) #every 10 degrees
no_of_coordinates = len(radiuses) * len(angles)
X = []
Y = []
Z = np.zeros((no_of_coordinates,no_of_coordinates))
for r in range(len(radiuses)):
for a in range(len(angles)):
x = radiuses[r] * np.cos(angles[a])
y = radiuses[r] * np.sin(angles[a])
X.append(x)
Y.append(y)
Z[a][r] = values[r]
'''
print(r)
print(a)
print(values[r])
'''
norm = cm.colors.Normalize(vmax=abs(np.array(Z)).max(), vmin=-abs(np.array(Z)).max())
fig, ax = plt.subplots()
cset1 = ax.contourf(
X, Y, Z, 4,
norm=norm)
plt.show()
这里有一些代码可以产生我想要的结果,但是圈子是"里面外出" - 中心应该是(0,0),我觉得我不应该这样做"手动:
print(radiuses)
#[ 0. 3.434 6.868 10.302]
print(values)
#[1, 5, 1, 3]
#calculate the x and y coordinates in mm for each measured radius and angle
x = np.linspace(-20, 20, 40)
y = np.linspace(-20, 20, 40)
X, Y = np.meshgrid(y,x)
angles = np.linspace(0, 2*np.pi, 360) #every 1 degrees
no_of_coordinates = len(radiuses) * len(angles)
Z = np.zeros((40, 40))
for r in range(len(radiuses)):
for a in range(len(angles)):
x = radiuses[r] * np.sin(angles[a])
y = radiuses[r] * np.cos(angles[a])
x = round(x)
y = round(y)
Z[x][y] = values[r]
norm = cm.colors.Normalize(vmax=abs(np.array(Z)).max(), vmin=-abs(np.array(Z)).max())
fig, ax = plt.subplots()
print(X)
print(Y)
print(Z)
cset1 = ax.contourf(
X, Y, Z, [1, 2],
norm=norm)
plt.colorbar(cset1)
plt.show()