非常简单和愚蠢的问题,我找不到答案;当我做手动轴定位时,如下:
fig = plt.figure(figsize=(17.5,8.0))
left = 0.1
bottom = 0.03
width = 0.3
height = 0.6
ax1 = plt.axes([left, bottom, width, height])
left += (width+0.12)
ax2 = plt.axes([left, bottom, width, height])
这些left, bottom, width, height
变量以相对于图形大小的单位设置,但对应于:left
和width
〜水平fig_size
而{{1} }和bottom
~vertical height
?我对此的实验反驳了这一点,并且根本不清楚,因为它似乎取决于fig_size
的垂直和水平组成部分......我不应该说figsize
文档非常也不清楚它(matplotlib
和plt.axes
都没有提供任何有用的信息。那么,请帮帮忙?!
编辑:我会在这里发布我的发现,因为也许对其他人也有帮助......
首先,现在看来,我首先是正确的(正如答案和评论所证实的那样),而fig.add_axes
和left
确实以横向 - width
为单位进行衡量,而{ {1}}和fig_size
是垂直测量的 - bottom
单位 - 一切都与第一个答案中的显示方式完全相同。
但是,它依赖于上下文(!),如果您正在进行height
下游 - 这似乎会覆盖fig_size
,plt.imshow
比例并创建方轴(对于我的数据) ,因为我有width
矩阵height
},其大小为n
。我不知道n
的这种行为。
示例:
带有min(width, height)
的 imshow
:
left = 0.1 bottom = 0.03 width = 0.3 height = 0.3
没有imshow
或任何其他内容:
所以left = 0.1 bottom = 0.03 width = 0.3 height = 0.3
是混淆和“反驳”的根源。
答案 0 :(得分:1)
如David Zwicker
所述,坐标是相对于图形大小的。如果您的实验似乎反驳了这一点,请考虑刻度线,轴标签等的位置
让我们创建一个具有与图相同坐标系的第三个轴,并在那里显示轴区域:
fig = plt.figure(figsize=(17.5,8.0))
left = 0.1
bottom = 0.03
width = 0.3
height = 0.6
# let us create third axes with the figure coordinates:
ax3 = plt.axes([0, 0, 1, 1], frameon=False, zorder=10)
ax1 = plt.axes([left, bottom, width, height])
ax3.add_artist(plt.Rectangle((left, bottom), width, height, facecolor=(1,0,0,.5), edgecolor='none'))
left += (width+0.12)
ax2 = plt.axes([left, bottom, width, height])
ax3.add_artist(plt.Rectangle((left, bottom), width, height, facecolor=(1,0,0,.5), edgecolor='none'))
这给出了:
轴位置为:
In [37]: ax1.get_position()
Out[37]: Bbox('array([[ 0.1 , 0.03],\n [ 0.4 , 0.63]])')
In [38]: ax2.get_position()
Out[38]: Bbox('array([[ 0.52, 0.03],\n [ 0.82, 0.63]])')
也许这澄清了定位。
至少从视觉上看,轴的下边缘可能真的比底部高3%,左边缘距离图的左边缘10%和52%。