I’ve tried matplotlib which has a very convenient polar coordinate mode,

but the output looked very wrong, so there must be a few mistakes in here:
#!/usr/bin/python
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import serial
import numpy as np
com_port = "/dev/ttyACM0"
baudrate = 115200
ser = serial.Serial(com_port, baudrate)
fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(111, projection='polar')
ax.set_ylim(0,2000)
data = np.zeros(360)
theta = np.linspace(0,360, num=360)
l, = ax.plot([],[])
databuffer = ""
def update(i):
global data, databuffer
if (ser.inWaiting()>0):
data_str = ser.read(ser.inWaiting()).decode('ascii')
databuffer += data_str
if ('A' in databuffer and 'B' in databuffer and 'C' in databuffer):
databuffer = databuffer.split('A')[1]
databuffer = databuffer.split('C')[0]
try:
(angle, distance) = databuffer.split('B')
ser.reset_input_buffer()
data[int(angle)]=int(distance)
except Exception as e: print(e)
l.set_data(theta, data )
return l,
ani = animation.FuncAnimation(fig, update, frames=360, interval=200, blit=True)
plt.show()




