matplotlib中的axis limit和sharex

时间:2017-03-30 18:36:11

标签: python-3.x matplotlib

我想展示两张这样的图片。

import matplotlib as plt
import numpy as np    
fig, axes = plt.subplots(2, 1, )
axes[0].imshow(np.random.random((3, 3)))
axes[1].imshow(np.random.random((6, 3)))

enter image description here 然后,我尝试了sharex=True,这意外地改变了两个情节的ylim。为什么??是否可以在不改变y轴限制的情况下对齐图形?

fig, axes = plt.subplots(2, 1, sharex=True)
axes[0].imshow(np.random.random((3, 3)))
axes[1].imshow(np.random.random((6, 3)))

enter image description here

我使用python 3.5.2和matplotlib 1.5.1。

1 个答案:

答案 0 :(得分:1)

默认情况下,imshow轴具有相同的宽高比。为了保持这一点,限制会发生变化。

您有两种选择:

a)具有相同方面的分配

将方面设置为"auto"。这允许子图获取可用空间并共享其轴。

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(2, 1,sharex=True ) 
axes[0].imshow(np.random.random((3, 3)), aspect="auto")
axes[1].imshow(np.random.random((6, 3)), aspect="auto")

plt.show()

enter image description here

b)调整图形大小或间距

您可以调整图形大小或间距,使轴实际匹配。然后,您还需要根据图像尺寸设置height_ratios

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(2, 1,sharex=True, figsize=(3,5), 
                            gridspec_kw={"height_ratios":[1,2]} ) 
plt.subplots_adjust(top=0.9, bottom=0.1, left=0.295, right=0.705, hspace=0.2)
axes[0].imshow(np.random.random((3, 3)))
axes[1].imshow(np.random.random((6, 3)))

plt.show()

enter image description here

这种方法要么涉及一些试验和错误,要么进行复杂的计算,例如,在this answer