Функция plt.show блокирует, то есть останавливает код, пока фигура открыта.В вашем коде есть команда show, которая останавливает анимацию в этой строке.Addint параметр block = False предотвратит остановку показа, т.е. plt.show (block = False).Взгляните на этот пример из matplotlib.У меня нет данных лидара, поэтому я не могу запустить ваш код.В любом случае, вы можете переместить файл plt.show ниже вызова функции анимации или добавить параметр block = False, чтобы решить вашу проблему.Первое рекомендуется.Пример кода включен.
data = [(15, 184.484375, 1740.25), (15, 190.015625, 1337.75), (15, 191.9375, 941.0), (15, 193.28125, 951.5), (15, 194.6875, 916.0), (15, 196.21875, 806.25), (15, 197.859375, 739.25), (15, 199.3125, 732.0), (15, 200.625, 731.25), (15, 202.0, 730.25), (15, 203.71875, 644.75), (15, 205.3125, 618.25), (15, 206.96875, 588.5), (15, 208.265625, 581.5), (15, 210.28125, 487.0), (15, 211.609375, 461.25), (15, 213.4375, 450.25), (15, 214.734375, 445.25), (15, 215.953125, 443.75), (15, 217.578125, 443.0), (15, 218.71875, 446.5), (15, 220.046875, 451.0), (15, 221.5, 451.0), (15, 223.1875, 451.25), (15, 224.640625, 445.25), (15, 226.078125, 425.75), (15, 227.359375, 408.5), (15, 229.171875, 387.25), (15, 230.390625, 396.0), (15, 231.875, 389.75), (15, 233.28125, 384.75), (15, 234.828125, 376.5), (15, 236.53125, 368.25), (15, 237.703125, 370.75), (15, 239.28125, 371.0), (15, 240.328125, 372.5), (15, 242.109375, 366.0), (15, 243.609375, 367.75), (15, 244.859375, 365.75), (15, 246.296875, 366.75), (15, 247.8125, 365.0), (15, 251.1875, 408.25), (15, 252.6875, 406.5), (15, 254.0625, 405.0), (15, 255.515625, 403.0), (15, 256.953125, 401.0), (15, 258.625, 401.5), (15, 259.96875, 400.25), (15, 261.171875, 400.5), (15, 262.875, 400.5), (15, 264.09375, 400.25), (15, 265.625, 400.25), (15, 266.59375, 401.25), (15, 268.140625, 401.5), (15, 269.84375, 403.0), (15, 271.21875, 404.5), (15, 272.1875, 406.0), (15, 273.71875, 406.5), (15, 275.15625, 409.5), (15, 276.453125, 411.5), (15, 278.15625, 414.5), (15, 282.21875, 423.5), (15, 283.765625, 428.5), (15, 288.09375, 227.25), (15, 289.71875, 218.75), (15, 291.4375, 213.0), (15, 293.28125, 209.5), (15, 293.9375, 207.0), (15, 296.34375, 204.75), (15, 297.75, 203.5), (15, 299.15625, 203.5), (15, 300.578125, 203.5), (15, 301.984375, 203.75), (15, 303.390625, 205.5), (15, 304.796875, 207.0), (15, 306.140625, 209.5), (15, 307.546875, 212.75), (15, 308.953125, 216.75), (15, 313.953125, 479.25), (15, 315.546875, 482.5), (15, 316.859375, 489.0), (13, 318.25, 500.0), (15, 320.578125, 546.25), (15, 322.1875, 537.75), (15, 323.5, 534.5), (15, 325.125, 532.75), (15, 326.5, 536.0), (15, 327.78125, 544.25), (15, 329.6875, 459.25), (15, 331.390625, 448.75), (15, 332.765625, 444.75), (15, 334.25, 443.0), (15, 335.65625, 447.0), (15, 336.890625, 455.5), (15, 340.4375, 589.75), (15, 341.78125, 587.75), (15, 343.21875, 584.75), (15, 344.578125, 583.75), (15, 345.984375, 581.0), (15, 347.453125, 580.75), (15, 348.828125, 578.0), (15, 350.265625, 577.0), (15, 351.6875, 575.75)]
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='polar')
def run(i):
try:
angle = []
distance = []
for i, scan in enumerate(data):
angle.append(0.0174533 * scan[1])
distance.append(scan[2])
print('angle:', angle)
ax.scatter(angle, distance, s=5)
except KeyboardInterrupt:
print("Stopping...")
ani = animation.FuncAnimation(fig, run, interval=50)
plt.show()
Второе редактирование: Вот как бы я это сделал:
from numpy import array, zeros
data = [(15, 184.484375, 1740.25), (15, 190.015625, 1337.75), (15, 191.9375, 941.0), (15, 193.28125, 951.5), (15, 194.6875, 916.0), (15, 196.21875, 806.25), (15, 197.859375, 739.25), (15, 199.3125, 732.0), (15, 200.625, 731.25), (15, 202.0, 730.25), (15, 203.71875, 644.75), (15, 205.3125, 618.25), (15, 206.96875, 588.5), (15, 208.265625, 581.5), (15, 210.28125, 487.0), (15, 211.609375, 461.25), (15, 213.4375, 450.25), (15, 214.734375, 445.25), (15, 215.953125, 443.75), (15, 217.578125, 443.0), (15, 218.71875, 446.5), (15, 220.046875, 451.0), (15, 221.5, 451.0), (15, 223.1875, 451.25), (15, 224.640625, 445.25), (15, 226.078125, 425.75), (15, 227.359375, 408.5), (15, 229.171875, 387.25), (15, 230.390625, 396.0), (15, 231.875, 389.75), (15, 233.28125, 384.75), (15, 234.828125, 376.5), (15, 236.53125, 368.25), (15, 237.703125, 370.75), (15, 239.28125, 371.0), (15, 240.328125, 372.5), (15, 242.109375, 366.0), (15, 243.609375, 367.75), (15, 244.859375, 365.75), (15, 246.296875, 366.75), (15, 247.8125, 365.0), (15, 251.1875, 408.25), (15, 252.6875, 406.5), (15, 254.0625, 405.0), (15, 255.515625, 403.0), (15, 256.953125, 401.0), (15, 258.625, 401.5), (15, 259.96875, 400.25), (15, 261.171875, 400.5), (15, 262.875, 400.5), (15, 264.09375, 400.25), (15, 265.625, 400.25), (15, 266.59375, 401.25), (15, 268.140625, 401.5), (15, 269.84375, 403.0), (15, 271.21875, 404.5), (15, 272.1875, 406.0), (15, 273.71875, 406.5), (15, 275.15625, 409.5), (15, 276.453125, 411.5), (15, 278.15625, 414.5), (15, 282.21875, 423.5), (15, 283.765625, 428.5), (15, 288.09375, 227.25), (15, 289.71875, 218.75), (15, 291.4375, 213.0), (15, 293.28125, 209.5), (15, 293.9375, 207.0), (15, 296.34375, 204.75), (15, 297.75, 203.5), (15, 299.15625, 203.5), (15, 300.578125, 203.5), (15, 301.984375, 203.75), (15, 303.390625, 205.5), (15, 304.796875, 207.0), (15, 306.140625, 209.5), (15, 307.546875, 212.75), (15, 308.953125, 216.75), (15, 313.953125, 479.25), (15, 315.546875, 482.5), (15, 316.859375, 489.0), (13, 318.25, 500.0), (15, 320.578125, 546.25), (15, 322.1875, 537.75), (15, 323.5, 534.5), (15, 325.125, 532.75), (15, 326.5, 536.0), (15, 327.78125, 544.25), (15, 329.6875, 459.25), (15, 331.390625, 448.75), (15, 332.765625, 444.75), (15, 334.25, 443.0), (15, 335.65625, 447.0), (15, 336.890625, 455.5), (15, 340.4375, 589.75), (15, 341.78125, 587.75), (15, 343.21875, 584.75), (15, 344.578125, 583.75), (15, 345.984375, 581.0), (15, 347.453125, 580.75), (15, 348.828125, 578.0), (15, 350.265625, 577.0), (15, 351.6875, 575.75)]
data = array(data)
data[:, 0] *= 0.0174533
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# init figure
fig, ax = plt.subplots(subplot_kw = dict(projection = 'polar'))
buffer = zeros((20, 2)) # make buffer of some size
p, = ax.plot(*buffer.T, '.', markersize = 20) # get the line
ymax = data.max(0)[1]
ymin = data.min(0)[1]
ax.set(**dict(ylim = (ymin, ymax))) # set the limits
while True:
for idx, scan in enumerate(data):
buffer[idx % len(buffer)] = scan[:2] # fill buffer
p.set_data(*buffer.T)
fig.canvas.draw() # draw
fig.canvas.flush_events() # deal with resize
fig.canvas.show() # show
Лично мне не очень нравится funcAnim