蟒蛇matplotlib blit轴或图的两侧?

每次我通过一个合适的程序时,我都试图刷新一些gui中的情节。 此外,这些图是在一个可以调整大小的框内,所以轴和标签等需要在调整大小后重新绘制。 所以想知道是否有人知道如何使用像plot.figure.canvas.copy_from_bboxblit这样的东西来更新图形的边。 这似乎只复制图形区域(绘制线条的位置)的背景,而不是图形或图形的两侧(标签和刻度)。 我一直试图通过反复试验和阅读mpl文档来更新我的图表,但到目前为止,我的代码已经变得非常复杂,像self.this_plot.canvas_of_plot..etc.etc.. .plot.figure.canvas.copy_from_bbox ...这可能太复杂了。 我知道我的语言可能有点关闭,但我一直试图通读matplotlb文档,图形,画布,图形,情节,figure.Figure等之间的差异正开始逃避我。 所以我的第一个和最重要的问题是:

1 - 你如何更新matplotlib图上的刻度和标签。

其次,由于我想更好地掌握这个问题的答案,

2 - 关于它们在GUI中覆盖的区域,情节,图形,画布等之间的区别是什么。

非常感谢你的帮助。


所有这些首先肯定会让人感到困惑!

首先,如果你链接蜱等,使用blitting没有太大意义。 如果只有一些事情正在改变,Blitting只是一种避免重新绘制所有内容的方法。 如果一切都在变化,那么使用blitting就没有意义。 只需重新绘制情节。

基本上,你只需要fig.canvas.draw()plt.draw()

无论如何,要回答你的第一个问题,在大多数情况下,你不需要手动更新它们。 如果您更改轴限制,他们会自行更新。 你遇到了问题,因为你只是在轴的内部而不是重绘图。

至于你的第二个问题,一个好的,详细的概述是Matplotlib用户指南的艺术家教程。

简而言之,有两个单独的图层。 其中一个涉及将事件分组到绘图时会担心的部分(例如图形,轴,轴,线等),另一个涉及渲染和绘制(通常是画布和渲染器)。

您在matplotlib情节中看到的任何内容都是Artist 。 (例如文字,线条,轴线,甚至人物本身。)艺术家a)知道如何绘制自己,b)可以包含其他艺术家。

对于艺术家自己绘制,它使用渲染器(一个几乎不会直接接触的后端特定模块)在一个FigureCanvas上画一个“画布”(一个基于矢量页面或像素缓冲区的抽象) 。 要在图中绘制所有内容,请调用canvas.draw()

因为艺术家可以是其他艺术家的团体,所以事物之间有层次关系。 基本上,这样的东西(显然,这有所不同):

Figure
    Axes (0-many) (An axes is basically a plot)
        Axis (usually two) (x-axis and y-axis)
            ticks
            ticklabels
            axis label
         background patch
         title, if present
         anything you've plotted, e.g. Line2D's

无论如何,希望这会让事情变得更清晰。

如果你真的想使用blitting来更新刻度标签等,你需要获取并恢复整个区域,包括它们。 这个区域有点棘手,因为直到绘制时间之后它才被完全知道(由于乳胶支持等原因,matplotlib中的绘制文本比渲染其他东西更复杂)。 你可以做到这一点,如果它真的是你想要的,我会很高兴给出一个例子,但是与绘制所有东西相比,它通常不会产生速度优势。 (例外的情况是,如果你只更新一个有很多子图的图中的一个子图)。

链接地址: http://www.djcxy.com/p/37901.html

上一篇: python matplotlib blit to axes or sides of the figure?

下一篇: Transparency issue with matplotlib and wxpython