如何使用matplotlib仅绘制咆哮列表的最后50个值?

时间:2017-04-11 19:36:57

标签: python matplotlib plot graph

我正在尝试在Python中使用matplotlib函数以交互方式仅绘制2个增长列表的最后50个值,同时循环继续。但是,一旦列表的大小增加到50以上,绘图线的值就会重叠。

我想清除重叠。

这是迭代时的绘图照片< 50.干净整洁。

http://imgur.com/a/FDDtD

这是迭代时的绘图照片>你可以看到它变得混乱了。

http://imgur.com/a/rB1vM

这是我的代码

import matplotlib.pyplot as plt

ls1 = []
ls2 = []

while True:
    (some computation to get, in every iteration, 2 new values: ls1_new and ls2_new)

    ls1.append(ls1_new)
    ls2.append(ls2_new)

    plt.plot(ls1[-50:])
    plt.plot(ls2[-50:])

    plt.draw()
    plt.pause(0.0001)

任何人都可以帮我解决重叠部分吗?谢谢你的帮助! :)

1 个答案:

答案 0 :(得分:0)

您的问题是您在每次迭代时都在创建新行。相反,更新现有线路可能会更好。下面的代码可能不会马上工作,但它应该指向正确的方向。一般的想法是保持对Line2D返回的plt.plot()对象的引用,然后使用成员函数Line2D.set_data(x, y)Line2D.set_ydata(y)来更新每次迭代时的行。

import matplotlib.pyplot as plt

ls1 = []
ls2 = []
l1, = plt.plot([])
l2, = plt.plot([])

while True:
    (some computation to get, in every iteration, 2 new values: ls1_new and ls2_new)

    ls1.append(ls1_new)
    ls2.append(ls2_new)

    l1.set_data(range(50),ls1[-50:])
    l2.set_data(range(50),ls2[-50:])

    plt.draw()
    plt.pause(0.0001)