我正在编写的应用程序需要实时绘制传入数据,这些数据长期存储在 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)
我知道我可以重新添加轴标签等,但我觉得应该有更 Eloquent 方法来这样做,这有点麻烦,因为可能有多个子图,重新格式化图形需要一段不平凡的时间。
最佳答案
而不是 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--')
关于python - 更新时使用 matplotlib "smears"滚动绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34595929/