我想展示两张这样的图片。
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)))
然后,我尝试了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)))
我使用python 3.5.2和matplotlib 1.5.1。
答案 0 :(得分:1)
默认情况下,imshow轴具有相同的宽高比。为了保持这一点,限制会发生变化。
您有两种选择:
将方面设置为"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()
您可以调整图形大小或间距,使轴实际匹配。然后,您还需要根据图像尺寸设置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()
这种方法要么涉及一些试验和错误,要么进行复杂的计算,例如,在this answer。