gpt4 book ai didi

python - 堆叠子图的对齐

转载 作者:太空狗 更新时间:2023-10-30 02:05:34 24 4
gpt4 key购买 nike

编辑:

我找到了一个答案(见下文)如何在子图中对齐图像:

for ax in axes:
ax.set_anchor('W')

编辑结束

我有一些数据是用 imshow 绘制的。它在 x 方向上很长,所以我通过在垂直堆叠的子图中绘制数据切片将其分成多行。我对结果很满意,但对于最后一个子图(不像其他的那么宽),我希望它与其他的左对齐。

下面的代码使用 Python 2.7.1 和 matplotlib 1.2.x 进行了测试。

#! /usr/bin/env python

import matplotlib.pyplot as plt
import numpy as np

x_slice = [0,3]
y_slices = [[0,10],[10,20],[20,30],[30,35]]
d = np.arange(35*3).reshape((35,3)).T
vmin = d.min()
vmax = d.max()
fig, axes = plt.subplots(len(y_slices), 1)


for i, s in enumerate(y_slices):
axes[i].imshow(
d[ x_slice[0]:x_slice[1], s[0]:s[1] ],
vmin=vmin, vmax=vmax,
aspect='equal',
interpolation='none'
)

plt.show()

结果

vertically stacked subplots, last centered

根据 Zhenya 的提示,我尝试了 axis.get/set_position。我尝试将宽度减半,但我不明白它的效果

for ax in axes:
print ax.get_position()

p3 = axes[3].get_position().get_points()
x0, y0 = p3[0]
x1, y1 = p3[1]
# [left, bottom, width, height]
axes[3].set_position([x0, y0, (x1-x0)/2, y1-y0])

enter image description here

get_position 给我每个子图的 bbox:

for ax in axes:
print ax.get_position()

Bbox(array([[ 0.125 , 0.72608696],
[ 0.9 , 0.9 ]]))
Bbox(array([[ 0.125 , 0.5173913 ],
[ 0.9 , 0.69130435]]))
Bbox(array([[ 0.125 , 0.30869565],
[ 0.9 , 0.4826087 ]]))
Bbox(array([[ 0.125 , 0.1 ],
[ 0.9 , 0.27391304]]))

所以所有的子图都具有完全相同的水平范围(0.125 到 0.9)。从较窄的第 4 个子图来看,子图中的图像以某种方式居中。

让我们看看 AxesImage 对象:

for ax in axes:
print ax.images[0]

AxesImage(80,348.522;496x83.4783)
AxesImage(80,248.348;496x83.4783)
AxesImage(80,148.174;496x83.4783)
AxesImage(80,48;496x83.4783)

同样,第 4 个图像的水平范围也相同。

接下来尝试 AxesImage.get_extent():

for ax in axes:
print ax.images[0].get_extent()

# [left, right, bottom, top]
(-0.5, 9.5, 2.5, -0.5)
(-0.5, 9.5, 2.5, -0.5)
(-0.5, 9.5, 2.5, -0.5)
(-0.5, 4.5, 2.5, -0.5)

有差异(右),但左值对所有值都相同,那么为什么第 4 个值居中?

编辑:它们都居中...

最佳答案

Axis.set_anchor 目前有效(我只是希望我现在不必手动调整太多):

for ax in axes:
ax.set_anchor('W')

enter image description here

关于python - 堆叠子图的对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10881520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com