【问题标题】:calculate wspace in gridspec with specified width ratio以指定的宽度比计算 gridspec 中的 wspace
【发布时间】:2020-03-18 09:31:53
【问题描述】:

我想计算wspace 以自定义调整gridspec 指定的子图,例如,将文本放在两个子图之间而不与轴重叠。根据docwspace

为子图之间的空间保留的宽度量,表示为平均轴宽度的分数。

所以它可以通过(ax1_pos.x0 - ax0_pos.x1) / (ax1_pos.x1 - ax1_pos.x0) 计算,正如here 指出的那样。 但是,当我在gridspec 中应用width_ratios 参数时,计算出的wspace 变得与分配的wspace 不一致,并且似乎与比率成正比。 width_ratios调整wspace有什么线索吗?

fig = plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(ncols=2, nrows=30, wspace=0.5)
gs1_pos = gs[:, 1].get_position(fig)
gs0_pos = gs[:, 0].get_position(fig)
ax0 = fig.add_subplot(gs[:, 0])
ax1 = fig.add_subplot(gs[:, 1])
print("Grids 0 position")
print(gs0_pos)
print("Grids 1 position")
print(gs1_pos)
print('space between figures represented as a fraction of axis width')
print((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0))
# return 0.5

但是一旦申请width_ratio,那么

fig = plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(ncols=2, nrows=30, width_ratios=[1, 4], wspace=0.5)
gs1_pos = gs[:, 1].get_position(fig)
gs0_pos = gs[:, 0].get_position(fig)
ax0 = fig.add_subplot(gs[:, 0])
ax1 = fig.add_subplot(gs[:, 1])
print("Grids 0 position")
print(gs0_pos)
print("Grids 1 position")
print(gs1_pos)
print('space between figures represented as a fraction of axis width')
print((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0))
# return 0.3125

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    虽然还是不明白matplotlib在我的例子中是如何计算wspace的,但是存在一个与设置的比率成正比的因素,因此可以实现校正。我发现不同比率的因素是

    f = 1 表示 1:1

    1:2 时 f = 0.75

    f = 2/3 为 1:3

    1:4 时 f = 0.625

    ......

    这些因子可以通过将wspace设置为0.1来获得。

    fig = plt.figure(figsize=(10, 6))
    for r in range(1, 10):
        gs = gridspec.GridSpec(ncols=2, nrows=30, width_ratios=[1, r])
        gs.update(wspace=0.1)
        gs1_pos = gs[:, 1].get_position(fig)
        gs0_pos = gs[:, 0].get_position(fig)
        ax0 = fig.add_subplot(gs[:, 0])
        ax1 = fig.add_subplot(gs[:, 1])
        print('space between figures represented as a fraction of axis width')
        print(round((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0) * 10, 4))
    

    然后修正分数,通过除以因子得到集合wspace

    fig = plt.figure(figsize=(10, 6))
    # factors for ratios 1 to 9
    factors = [1, 0.75, 0.667, 0.625, 0.6, 0.583, 0.571, 0.562, 0.556]
    for r in range(1, 10):
        gs = gridspec.GridSpec(ncols=2, nrows=30, width_ratios=[1, r], wspace=0.6)
        gs1_pos = gs[:, 1].get_position(fig)
        gs0_pos = gs[:, 0].get_position(fig)
        ax0 = fig.add_subplot(gs[:, 0])
        ax1 = fig.add_subplot(gs[:, 1])
        print(round((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0) / factors[r-1], 4))
    

    获取

    0.6, 0.6, 0.5997, 0.6, 0.6, 0.6003, 0.6005, 0.6005, 0.5995
    

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 2016-01-23
      • 2019-10-02
      • 1970-01-01
      • 2013-09-10
      • 2013-03-04
      • 2013-08-26
      • 2011-06-04
      • 2011-03-28
      相关资源
      最近更新 更多