Pyplot:共享轴和子图之间没有空间

13

这与之前的问题 new pythonic style for shared axes square subplots in matplotlib? 有关(或者说是其后续)。

我想要像上面链接中提到的那样,让子图共享一个轴。不过,我还想让各个子图之间没有空白。以下是代码的相关部分:

f, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)
plt.setp(ax1, aspect=1.0, adjustable='box-forced')
plt.setp(ax2, aspect=1.0, adjustable='box-forced')

# Plot 1
ax1.matshow(pixels1, interpolation="bicubic", cmap="jet")
ax1.set_xlim((0,500))
ax1.set_ylim((0,500))

# Plot 2
ax2.matshow(pixels2, interpolation="bicubic", cmap="jet")
ax2.set_xlim((0,500))
ax2.set_ylim((0,500))

f.subplots_adjust(wspace=0)

这是结果: enter image description here

如果我注释掉两个plt.setp()命令,就会出现一些额外的白色边框: enter image description here

如何使图像看起来像我的第一个结果,但轴与第二个结果一样接触?

1个回答

13

编辑:获取结果最快的方法是@Benjamin Bannier所描述的方法,只需使用

fig.subplots_adjust(wspace=0)

另一种选择是创建一个宽高比为2的图形(因为有两个绘图)。只有在您计划将该图形包含在文档中,并且已经知道最终文档的列宽时,这可能是明智的选择。
您可以在调用“Figure(figsize=(width,height))”或作为“plt.subplots()”的参数来设置宽度和高度,单位为英寸。示例:
fig, axes = plt.subplots(ncols=2, sharex=True, sharey=True,figsize=(8,4))
fig.subplots_adjust(0,0,1,1,0,0)

截图:在此输入图片描述

正如@Benjamin Bannier所指出的那样,缺点是你没有边距。然后你可以使用subplot_adjust()进行调整,但如果想保持解决方案简单,必须小心地对称地腾出空间。一个示例可以是fig.subplots_adjust(.1,.1,.9,.9,0,0)


1
你的 subplots_adjust 隐藏了轴,这可能不是所需的。我建议使用 subplots_adjust(hspace=0),它可以专门删除面板之间的空间。 - Benjamin Bannier
是的,看来我有错误的理解,我总是把这两个混淆了。 - Benjamin Bannier
1
如果您查看我的原始问题,我确实使用了subplots_adjust(wspace=0),但它并没有减少空间。然而,您的解决方案使用适当的图形大小并仔细调整子图边距对称地有效,对于我的目的已经足够了!然而,我仍然感到困惑的是,我的原始代码为什么不起作用... - Michael Becker
我找到了我的错误!setp() 行应该在 matshow() 命令之后发生(在 pyplot 世界中这是有意义的,我猜),然后它按照你的建议工作了!谢谢。 - Michael Becker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接