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()