Python利用matplotlib制作雷达扫描显示仪(之后可结合串口和超声波传感器使用,亦可以做为仪表盘使用)。内有制作雷达扫描GIF图的源代码包含。
'''
matplotlib雷达扫描
'''
from cmath import pi
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
dataLenth = 2
data = np.array([9.99,0.01])
fig = plt.figure(figsize=(20, 20), dpi=400)
ax = plt.subplot(111,projection='polar')
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
data = np.concatenate((data, [data[0]])) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合
ax.set_thetagrids(angles * 180/np.pi, "", fontproperties="SimHei")
ax.set_title("matplotlib雷达扫描", va='bottom', fontproperties="SimHei")
ax.set_rlim(0,10)
ax.grid(True)
#ax.plot(angles+0.2*pi, data, 'g', linewidth=2)# 画线
metadata = dict(title="Movie", artist="sourabh")
writer = animation.PillowWriter(fps=15, metadata=metadata)
with writer.saving(fig, "radio_wave.gif", 100):
for i in range(180):
#数据个数
dataLenth = 2
#数据
data = np.array([9.99,0.01])
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
data = np.concatenate((data, [data[0]])) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合
ax.plot(angles+0.01*pi*(i+1), data, 'g', linewidth=0.1)# 画线
ax.fill(angles, data, facecolor='white', alpha=0.5)# 填充
plt.pause(0.01)
ax.plot(angles+0.01*pi*(i+1), data, 'white', linewidth=0.2)# 画线
#ax.fill(angles, data, facecolor='white', alpha=0.5)# 填充
writer.grab_frame()
效果如下:
左右旋转效果代码:
from cmath import pi
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
dataLenth = 2
data = np.array([9.99,0.01])
fig = plt.figure(figsize=(20, 20), dpi=400)
ax = plt.subplot(111,projection='polar')
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
data = np.concatenate((data, [data[0]])) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合
ax.set_thetagrids(angles * 180/np.pi, "", fontproperties="SimHei")
ax.set_title("matplotlib雷达扫描", va='bottom', fontproperties="SimHei")
ax.set_rlim(0,10)
ax.grid(True)
#ax.plot(angles+0.2*pi, data, 'g', linewidth=2)# 画线
metadata = dict(title="Movie", artist="sourabh")
writer = animation.PillowWriter(fps=15, metadata=metadata)
with writer.saving(fig, "radio_wave.gif", 100):
for i in range(90):
#数据个数
dataLenth = 2
#数据
data = np.array([9.99,0.01])
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
data = np.concatenate((data, [data[0]])) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合
ax.plot(angles+0.01*pi*(i+1), data, 'g', linewidth=0.1)# 画线
#ax.fill(angles, data, facecolor='white', alpha=0.5)# 填充
plt.pause(0.01)
ax.plot(angles+0.01*pi*(i+1), data, 'white', linewidth=0.2)# 画线
#ax.fill(angles, data, facecolor='white', alpha=0.5)# 填充
writer.grab_frame()
for i in range(86):
#数据个数
dataLenth = 2
#数据
data = np.array([9.99,0.01])
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
data = np.concatenate((data, [data[0]])) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合
ax.plot(angles+9-0.01*pi*(i+1), data, 'g', linewidth=0.1)# 画线
#ax.fill(angles, data, facecolor='white', alpha=0.5)# 填充
plt.pause(0.01)
ax.plot(angles+9-0.01*pi*(i+1), data, 'white', linewidth=0.2)# 画线
#ax.fill(angles, data, facecolor='white', alpha=0.5)# 填充
writer.grab_frame()
实现效果如下: