如何使用Python Matplotlib中的set_position方法修复轴位置?

10

我认为这很简单,但是我在互联网和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   ]]))

请注意,在执行 "draw()" 命令之后,ax2的x0值已经发生了变化。是否有人能给出任何提示?

谢谢!


正在绘制什么数据?我特别关注的是x轴的缩放。 - stanri
什么是轴缩放? - wiswit
我在我的一端进行了测试,结果不同:`import matplotlib.pyplot as plt` `fig = plt.figure(figsize=plt.figaspect(0.75))` `ax2 = fig.add_subplot(111)` `ax2.set_position([0.125,0.63,0.25,0.25])` `ax2.get_position()` `Bbox(array([[ 0.125, 0.63 ],[ 0.375, 0.88 ]]))` `plt.draw()` `ax2.get_position()` `Bbox(array([[ 0.125, 0.63 ],[ 0.375, 0.88 ]]))` - stanri
关于x轴缩放,我最初误解了问题。 :) 我指的是x数据所在范围。那不应该是相关的。 - stanri
2
是的,我忘记添加以下注释。实际上,在我的脚本中有一步是设置相等的视图比例。我猜当我使用绘制命令时,它会应用这个命令,并且设置视图比例的默认锚点是“center”。我猜这就是为什么位置发生了变化。 - wiswit
1
wiswit:自己回答问题可能是个好主意。这对于那些有同样问题的人来说,能够更容易地找到答案。 - stanri
1个回答

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 ]]))

通过这样,您可以看到设置可以像预期的那样循环传递。

此外,您也可以将结果视为tuple(元组):

>>> a.set_position([0.125,0.63,0.25,0.25])
>>> a.get_position().bounds
(0.125, 0.63, 0.25, 0.25)

这取决于您是将位置/位置视为边界框:x0,y0乘以x1,y1,还是将其视为位置和大小:x,y,width,height

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接