【问题标题】:Scrolling plot using matplotlib "smears" when updating更新时使用matplotlib“smears”滚动绘图
【发布时间】:2016-01-04 16:52:09
【问题描述】:

我正在编写的应用程序需要对长期存储在 Excel 电子表格中的传入数据进行实时绘图。所以实时图表显示了最近的 25 个数据点。

当绘图必须移入最新的数据点并移出最旧的点时,问题就出现了。当我这样做时,图表“涂抹”如下所示:

然后我开始使用plt.cla(),但这导致我丢失了绘图中的所有格式,例如标题、轴等。我有什么方法可以更新我的图表,但保留我的图表格式?

这是plt.cla()之后的示例:

.

这基本上是我在更大的循环中更新图表的方式:

if data_point_index < max_data_points:
    y_data[data_point_index] = measurement
    plt.plot(x_data[:data_point_index + 1], y_data[:data_point_index + 1], 'or--')
else:
    plt.cla()
    y_data[0:max_data_points - 1] = y_data[1:max_data_points]
    y_data[max_data_points - 1] = measurement
    plt.plot(x_data, y_data, 'or--')
plt.pause(0.00001)

我知道我可以重新添加轴标签等,但我觉得应该有一个更雄辩的方式来做到这一点,这有点麻烦,因为可能有多个子图和重新格式化图形需要一段不平凡的时间。

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    而不是 plt.cla(),您发现它会清除轴上的所有内容,您可以删除最后绘制的线,这将使您的标签和格式保持不变。

    Axes 实例有一个属性lines,它存储当前绘制在轴上的所有线。要删除最后绘制的线,我们可以使用plt.gca() 访问当前坐标区,然后从坐标区上的lines 列表中访问pop()

    else:
        plt.gca().lines.pop()
        y_data[0:max_data_points - 1] = y_data[1:max_data_points]
        y_data[max_data_points - 1] = measurement
        plt.plot(x_data, y_data, 'or--')
    

    【讨论】:

    • 大部分时间都在工作。必须通过 plt.gca().lines[:] = [] 从弹出更改为完全清除列表,因为弹出只删除了最近的数据点,我需要将所有内容向下移动并添加一个新数据点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 2022-08-13
    • 1970-01-01
    • 2020-11-06
    • 2017-10-13
    • 2011-07-06
    • 2018-04-28
    相关资源
    最近更新 更多