我不明白的定义axes.bbox.例如:
>>> import matplotlib.pyplot as plt
>>> f, ax = plt.subplots()
>>> ax.bbox
TransformedBbox(Bbox('array([[ 0.125, 0.1 ],\n [ 0.9 , 0.9 ]])'), BboxTransformTo(TransformedBbox(Bbox('array([[ 0., 0.],\n [ 8., 6.]])'), Affine2D(array([[ 80., 0., 0.],
[ 0., 80., 0.],
[ 0., 0., 1.]])))))
Run Code Online (Sandbox Code Playgroud)
这些值意味着什么?我会假设4个数字足以定义一个矩形.显然,这里存储了更多信息.
对于像ax.figure.canvas.blit(bbox)我需要为bbox定义值的命令.如何手动定义bbox特定尺寸(比如轴的右下四分之一)?
您看到的值显示有点复杂Bbox,嵌套转换会自动应用.首先,它是一个TransformedBbox实例 - 引用文档:
由给定转换自动转换的Bbox.
它在你上面显示的控制台中的表示显示两件事(逗号分隔) - Bbox它所基于的主要内容,以及transform它所适用的主要内容.在transform这种情况下是一个BboxTransformTo对象,其中:
BboxTransformTo是一种转换,可以将点从单位边界框线性转换为给定的Bbox.
在你的情况下,它transform本身是基于a TransformedBBox再次具有Bbox它所基于的变换 - 对于这个嵌套实例的Affine2D变换.
转换的目的(我相信)是从相对坐标转换为屏幕单位.
在您的示例中,您可能会发现您希望看到的点由下式给出
>>> ax.bbox.get_points()
array([[ 80., 48.],
[ 576., 432.]])
Run Code Online (Sandbox Code Playgroud)
从文档中,您可以使用您想象的四个数字来实例化Bbox对象,例如
from matplotlib.transforms import Bbox
my_blit_box = Bbox(np.array([[x0,y0],[x1,y1]])
Run Code Online (Sandbox Code Playgroud)
您也可以使用其中一种静态方法,例如
my_blit_box = Bbox.from_bounds(x0, y0, width, height)
Run Code Online (Sandbox Code Playgroud)我没有你的用例,所以不能说是否自己滚动Bbox并传递它将blit()直接适用于你的情况.
然而,做你想做的事情可能是一个非常复杂的方式.
假设你想要为一个情节设置动画 - 你通常可以blit=True作为参数传递给动画函数,他们会自己对它进行排序. 文档在这里.这里有一些例子,包括带有子图的例子.作为一个骨架 - 你可能会做类似的事情
fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 4)
# Code to actually put data on your 3 axes
animation.TimedAnimation.__init__(self, fig, interval=50, blit=True)
Run Code Online (Sandbox Code Playgroud)
如果你想刷新一个子图中的一个子图 - ax.bbox直接传入blit函数应该工作.
请注意,大多数给出的例子并不定义自己B-盒,而是传递一个B-盒从得到的axes,figure或canvas成blit.另请注意,不进行任何操作ax.figure.canvas.blit()会重绘整个画布(默认选项 - 尽管我看不出你为什么要这样做).