Python 如何控制图中的子批次位置
我正在使用Python 如何控制图中的子批次位置,python,matplotlib,Python,Matplotlib,我正在使用imshow和aspect='equal'绘制多个图形,其中图形之间的轴尺寸不同。这是为了演示,所以我希望图形最终与图形边缘左对齐(这样左轴在每张幻灯片上落在同一点上)。相反,所发生的情况是轴在子地块\u adjust分配的空间内居中。下面是一个例子: import numpy as np import matplotlib.pyplot as plt for width in [7, 10, 13]: data = np.random.rand(10 * width).re
imshow
和aspect='equal'
绘制多个图形,其中图形之间的轴尺寸不同。这是为了演示,所以我希望图形最终与图形边缘左对齐(这样左轴在每张幻灯片上落在同一点上)。相反,所发生的情况是轴在子地块\u adjust
分配的空间内居中。下面是一个例子:
import numpy as np
import matplotlib.pyplot as plt
for width in [7, 10, 13]:
data = np.random.rand(10 * width).reshape(10, width)
fig, ax = plt.subplots(figsize=(3, 2))
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.2, top=0.8)
ax.imshow(data)
ax.set_title('10 × {}'.format(width))
fig.savefig('10_rows_x_{}_columns.png'.format(width), facecolor='0.7',
edgecolor='none')
如何使所有三个轴的y轴与每个图形的左边缘保持相同的距离?由于图像的固定方向,轴的大小会发生变化,因此会重新定位,使其位于图形的中心,即使子地块参数指定了更大的空间 缩小可用空间 您可以绘制图形,使轴的位置固定,获得轴的实际宽度,并将“右”子批次参数设置为“左”和“宽度”的总和
import numpy as np
import matplotlib.pyplot as plt
for width in [7, 10, 13]:
data = np.random.rand(10 * width).reshape(10, width)
fig, ax = plt.subplots(figsize=(6, 4))
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)
ax.imshow(data)
ax.set_title(u'10 × {}'.format(width))
fig.canvas.draw()
pos=ax.get_position()
fig.subplots_adjust(right=0.1+pos.width)
fig.savefig('10_rows_x_{}_columns.png'.format(width), facecolor='0.7',
edgecolor='none')
plt.show()
迭代变换位置
一种方法是迭代地将轴的左位置设置为0.1
绘制图形,让轴自身重新缩放,然后再次设置轴的位置等。这样它将均匀地结束在x=0.1
位置
import numpy as np
import matplotlib.pyplot as plt
for width in [7, 10, 13]:
data = np.random.rand(10 * width).reshape(10, width)
fig, ax = plt.subplots(figsize=(6, 4))
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)
ax.imshow(data)
ax.set_title(u'10 × {}'.format(width))
fig.canvas.draw()
while ax.get_position().x0 > 0.1:
pos=ax.get_position()
pos.x0=0.1
ax.set_position(pos)
fig.canvas.draw()
fig.savefig('10_rows_x_{}_columns.png'.format(width), facecolor='0.7',
edgecolor='none')
plt.show()
请注意,这会将图形重绘约50次。因此,根据所需的精度,可以选择稍大的条件,例如而ax.get_position().x0>0.105:
等等
两种方法的结果如下图
您是否需要在所有情况下都具有相同的体形尺寸,还是可以选择更改体形宽度以使图像在彼此下方对齐?@ImportanceOfBeingErnest理想情况下,在所有情况下都具有相同的体形尺寸,但我可以处理通过编程更改体形宽度的情况。谢谢!虽然我认为你的第一句话可以改进;重新定位并不是严格地由于相等的纵横比——任何硬编码的纵横比(即除
aspect='auto'
以外的任何东西)都会发生这种情况,而不仅仅是一对一的纵横比。您可以自己编辑这些小东西。我用一个更简单的解决方案更新了答案。