导入MNIST手写数字数据集绘制子图时底部总是缺失一个子图的原因是什么
问题原因
子图缺失是plt.tight_layout()的调用位置错误导致的:plt.tight_layout()的作用是一次性自动适配当前所有子图的间距、边距到画布范围,仅需在所有子图创建完成后调用一次即可。你将该方法放在了子图绘制的循环内部,每新增一个子图就会触发一次布局重算,多次迭代后的累积偏移会把最底部的子图挤出画布可视范围。
修复方案
将plt.tight_layout()从循环内移到所有子图绘制完成后、plt.show()之前调用即可,修正后代码如下:
import keras from keras.datasets import mnist import matplotlib.pyplot as plt (X_train, y_train), (X_test, y_test) = mnist.load_data() fig = plt.figure(figsize=(8,8)) n = 0 for i in range(5): for j in range(5): plt.subplot(5, 5, i*5 +j +1) plt.imshow(X_train[n], cmap='Greys') plt.title("Digit:{}".format(y_train[n])) n += 1 # 所有子图绘制完成后统一调整布局 plt.tight_layout() plt.show()
如果调整后仍觉得布局效果不理想,可以额外通过plt.subplots_adjust()自定义边距,按需调整bottom参数即可:
plt.tight_layout() # 数值越大底部留白越多,可根据实际显示效果调整 plt.subplots_adjust(bottom=0.1) plt.show()
内容的提问来源于stack exchange,提问作者4daJKong
相关产品推荐
相关产品推荐

