【问题标题】:axis limit and sharex in matplotlibmatplotlib 中的轴限制和 sharex
【发布时间】:2017-03-30 18:36:11
【问题描述】:

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

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。

【问题讨论】:

    标签: python-3.x matplotlib


    【解决方案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()
    

    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()
    

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

    【讨论】:

    • 我做了fig, axes = plt.subplots(2, 1, sharex=True ,figsize=(1, 5))。这会在两张图片中添加一些空白,但会保留纵横比。
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2019-06-25
    • 2020-07-08
    • 2014-09-18
    • 2011-04-16
    相关资源
    最近更新 更多