如何在python matplotlib中使用set_position方法修复轴位置?

wis*_*wit 10 python position axes matplotlib

我认为这很容易,但我搜索了互联网和matplotlib用户的邮件列表,但无法找到答案.ax2是图"fig"中"ax"轴内的插入轴,我通过以下方式制作:http: //matplotlib.sourceforge.net/examples/pylab_examples/axes_demo.html

但现在我的问题是我无法修复ax2我想要的确切位置,似乎draw()命令改变了这个:

In [352]:
ax2.set_position([0.125,0.63,0.25,0.25])

In [353]:
ax2.get_position()

Out[353]:
Bbox(array([[ 0.125,  0.63 ],
       [ 0.375,  0.88 ]]))

In [354]:
draw()

In [355]:
ax2.get_position()

Out[355]:
Bbox(array([[ 0.15625,  0.63   ],
       [ 0.34375,  0.88   ]]))
Run Code Online (Sandbox Code Playgroud)

注意,在"draw()"命令之后,ax2的x0发生了变化.任何人都可以提供任何提示吗?

谢谢!

Chr*_*Zeh 6

尝试通过将参数指定为Bbox对象来设置位置:

>>> ax2.set_position(matplotlib.transforms.Bbox(array([[0.125,0.63],[0.25,0.25]])))
>>> ax2.get_position()
Bbox(array([[ 0.125,  0.63 ],
       [ 0.25 ,  0.25 ]]))
>>> draw()
>>> ax2.get_position()
Bbox(array([[ 0.125,  0.63 ],
       [ 0.25 ,  0.25 ]]))
Run Code Online (Sandbox Code Playgroud)

这样您就可以看到设置是像您期望的那样往返的。

此外,您还可以像tuple这样查看结果:

>>> a.set_position([0.125,0.63,0.25,0.25])
>>> a.get_position().bounds
(0.125, 0.63, 0.25, 0.25)
Run Code Online (Sandbox Code Playgroud)

这仅取决于您是否想将位置/位置视为边界框:x0,y0by x1,y1,还是通过位置和大小:x,y,width,height

当前您告诉它设置 a x,y,width,height,然后它告诉您x0,y0,x1,y1