matplotlib.pyplot.imshow:使用“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)
,但都没有效果。我该如何去掉多余的白色空隙呢?任何建议都非常感谢。
3 个回答
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 上提个问题是值得的。
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)
这样做后,我得到了如图所示的效果 ,在坐标轴内没有留白。通过在
plt.subplots
中使用 figsize
或者 fig.subplots_adjust
,你可以获得更好的坐标轴比例。