cha*_*ase 6 python user-interface matplotlib
每次我通过一个适合的程序,我试图刷新我在gui中的一些情节.此外,这些图是在可以调整大小的framw内,因此在调整大小后需要重新绘制轴和标签等.所以,想知道是否有人知道如何使用类似更新图的两侧plot.figure.canvas.copy_from_bbox和blit.这似乎只复制和blit图形区域的背景(绘制线条的位置),而不是图形或图形的边(标签和刻度线的位置).我一直试图让我的图表通过反复试验和读取mpl文档进行更新,但到目前为止,我的代码已经变得非常复杂,例如self.this_plot.canvas_of_plot..etc.etc.. .plot.figure.canvas.copy_from_bbox......这可能太复杂了.我知道我的语言可能有些偏差,但我一直在尝试阅读matplotlb文档,图,画布,图形,情节,图形等之间的差异开始躲避我.所以我的首要问题是:
1 - 如何更新matplotlib图周围的刻度和标签.
其次,既然我想更好地掌握这个问题的答案,
2 - 关于它们在GUI中覆盖的区域,绘图,图形,画布等之间有什么区别.
非常感谢你的帮助.
Joe*_*ton 18
所有这些一开始肯定会让人感到困惑!
首先,如果你正在链接蜱等,那么使用blitting没什么意义.如果只是某些事情发生变化,Blitting只是避免重新绘制所有内容的一种方法.如果一切都在变化,那么使用blitting是没有意义的.重新绘制情节.
基本上,你只是想要fig.canvas.draw()或plt.draw()
无论如何,要回答您的第一个问题,在大多数情况下您不需要手动更新它们.如果更改轴限制,它们将自行更新.你遇到了问题,因为你只是在轴内部进行blitting,而不是重绘绘图.
至于你的第二个问题,一个良好的,详细的概述是艺术家教程中的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
Run Code Online (Sandbox Code Playgroud)
无论如何,希望这会让事情变得更加清晰.
如果你真的想使用blitting来更新刻度标签等,你需要抓住并恢复包括它们在内的整个区域.这个区域有点棘手,因为直到绘制时间之后才知道它(在matplotlib中渲染文本比由于乳胶支持而渲染其他东西更复杂).你可以做到这一点,如果它真的是你想要的话,我会很高兴给出一个例子,但它通常不会比仅仅绘制所有东西产生速度优势.(例外情况是,如果您只更新包含大量子图的图中的一个子图.)