如何调整子图间距并将y标签放置在matplotlib中?

时间:2018-11-25 12:26:09

标签: python-3.x matplotlib subplot

我必须使用matplotlib生成以下布局。

fig = plt.figure(figsize=(15,9))
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 0], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 1], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 2], 1, 3 )

enter image description here 我想在第二列和第三列之间添加一些空间,以放置由红色标记表示的通用ylabel 。我被困在这一点上。有人可以给我一些指导吗?谢谢!

1 个答案:

答案 0 :(得分:1)

如果标签不长,则只需将其添加到中间图形并使用tight_layout对其进行格式化:

fig = plt.figure(figsize=(15,9))
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 0], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 1], 1, 1 ) 
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 2], 1, 3 )
    if i == 1:
        ax.set_ylabel("label for all")

plt.tight_layout()
plt.show()

但是,这对于很长的标签将不起作用,因为tight_layout会误解中间行的高度。在这种情况下,我们可以简单地将其替换为更长的文本:

fig = plt.figure(figsize=(15,9))
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 0], 1, 1 )
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 1], 1, 1 ) 
for i in range(3):
    ax = plt.subplot2grid((3, 5), [i, 2], 1, 3 )
    if i == 1:
        mylabel = ax.set_ylabel("dummy")

plt.tight_layout()

mylabel.set_text("not a dummy any more but a very very very loooooooooooooooooong label")
plt.show()

样本输出: enter image description here