首页 > 解决方案 > 更新 matplotlib 注释位置而不重绘所有数据

问题描述

我基本上在我的自定义 pyplot 图形工具上重新创建了 matlab 数据光标。它允许拖动和左/右箭头键来更新注释框沿线的位置等。我的问题来自于有大量行时。数据光标仍然可以工作,但拖动它的位置是一场噩梦,而且速度非常慢。我相当肯定,问题源于我的 canvas.draw() 调用,因为每次数据光标移动时它都会重绘整个图形。

我正在努力实现像 blit() 和“restore_region()”这样的选项,但我在实现它们时遇到了很大的困难。任何人都可以提供如何使这项工作的外壳吗?由于代码本身的分类,我无法包含实际代码,但我可以给出一个小的伪代码示例。

def create_anno(self):
    # Do annotation creation stuff here
    self.background = self.figure.canvas.copy_from_bbox(self.axis.bbox)

def key_press(self):
    self.figure.canvas.restore_region(self.background)
    # Do update position/text stuff here
    self.figure.canvas.blit(self.axis.bbox)
    self.figure.canvas.flush_events()

key_press 函数正常调用,但是注释框不再移动。大多数示例在其 restore_region() 和 blit() 调用之间使用 draw_artist() ,但注释没有。我只想更新一个小注释框在图形中的位置,而不必重新绘制整个轴。有任何想法吗?

谢谢!

标签: pythonmatplotlib

解决方案


推荐阅读