如何调整子图间距并在 matplotlib 中放置 y 标签?
How to adjust subplots spacing and to place y labels in matplotlib?
我必须使用 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 )
我想在第二列和第三列之间添加一些 space 以 放置一个由红色标记指示的公共 ylabel。我被困在这一点上。任何人都可以给我一些指导吗?谢谢!
如果你的label不长,你可以直接把它加到中间的图上,用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()
示例输出:
我必须使用 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 )
如果你的label不长,你可以直接把它加到中间的图上,用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()
示例输出: