【问题标题】:How to use matplotlib to plot only the last 50 values of growling lists?如何使用 matplotlib 仅绘制咆哮列表的最后 50 个值?
【发布时间】:2017-04-11 19:36:56
【问题描述】:

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

我想清除重叠。

这是迭代

这是迭代 > 50 时的情节照片。您可以看到它变得混乱。

这是我的代码

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)

谁能帮我解决重叠部分?提前感谢您的帮助! :)

【问题讨论】:

    标签: python matplotlib plot graph


    【解决方案1】:

    您的问题是您在每次迭代时都创建新行。相反,更新现有的行可能会更好。下面的代码可能不会立即起作用,但它应该为您指明正确的方向。总体思路是保留对plt.plot() 返回的Line2D 对象的引用,然后使用成员函数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)
    

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2014-10-19
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多