13

我有一个与此处发布的问题类似的问题。sharex不同之处在于,当我绘制两个通过和sharey属性共享轴的子图时,我在绘图区域内得到了不需要的空白。即使在设置后空格仍然存在autoscale(False)。例如,使用与上述帖子的答案类似的代码:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)
ax.imshow(np.random.random((10,10)))
ax.autoscale(False)
ax2 = fig.add_subplot(2, 1, 2, sharex=ax, sharey=ax)   # adding sharex and sharey
ax2.imshow(np.random.random((10,10)))
ax2.autoscale(False)
plt.show()

导致图像。

我也尝试过ax.set_xlim(0, 10),并ax.set_xbound(0, 10)按照这里的建议,但无济于事。我怎样才能摆脱多余的空白?任何想法,将不胜感激。

4

3 回答 3

17

正如这里所建议的,添加:

ax.set_adjustable('box-forced')
ax2.set_adjustable('box-forced')

解决问题。

文档

于 2013-02-27T22:38:49.457 回答
3

用作plt.subplots

fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=False)
ax[0].imshow(np.random.random((10,10)))
ax[0].autoscale(False)
ax[1].imshow(np.random.random((10,10)))
ax[1].autoscale(False)

这个图在轴内没有空格。使用figsizeinsideplt.subplotsfig.subplots_adjust您可以获得更好的轴比。

于 2013-02-26T20:18:07.303 回答
1

问题是使用add_subplot. 请注意,如果您调整图形大小,空白的数量会发生变化。

以下似乎有效(直到您重新调整图形大小)

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(5, 5))
ax = fig.add_axes([.3, .55, .35, .35]) 
ax.imshow(np.random.random((10,10)))
ax.autoscale(False)
ax2 = fig.add_axes([.3,  .05, .35, .35], sharex=ax, sharey=ax ) 
ax2.imshow(np.random.random((10,10)))
ax2.autoscale(False)

plt.show()

这看起来像是axes对象的大小/位置、共享轴和来自imshow.

如果你能在没有蜱虫的情况下生活,你可以做到

ax.set_axis_off()
ax2.set_axis_off()

我认为值得为此在 matplotlib github 上打开一个问题。

于 2013-02-25T22:59:18.110 回答