使用fetch_olivetti_faces绘图仅显示1个样本且存在多余垂直空间求助
解决fetch_olivetti_faces绘图仅显示单个样本的问题
1. 先检查子图创建与循环逻辑
大概率是绘图代码的子图网格设置或循环遍历出了问题,先确认你的代码是否正确创建了多行多列的子图并遍历绘制样本:
正确的核心代码示例如下:
from sklearn.datasets import fetch_olivetti_faces import matplotlib.pyplot as plt # 加载数据集 faces = fetch_olivetti_faces() # 设置要展示的样本数、行列数 show_samples = 36 rows, cols = 6, 6 # 创建子图网格 fig, axes = plt.subplots(rows, cols, figsize=(12, 12)) # 遍历所有子图绘制样本 for idx, ax in enumerate(axes.flat): if idx >= show_samples: ax.axis('off') # 超出样本数的子图隐藏坐标轴 continue ax.imshow(faces.images[idx], cmap='gray') ax.set_xticks([]) # 隐藏刻度 ax.set_yticks([]) # 自动调整子图间距,消除多余空白 plt.tight_layout() plt.show()
如果你的代码里只创建了单个子图(比如plt.subplot(1,1,1)),或者循环条件写错(比如for i in range(1)),就只会显示1个样本。
2. 检查Spyder的绘图后端设置
Spyder的绘图后端配置异常可能导致显示问题:
- 打开Spyder菜单:工具 > 偏好设置 > IPython控制台 > 图形
- 将后端从
Inline切换为Automatic或Qt5Agg,重启Spyder后重新运行代码 - 同时确认代码里没有提前执行
plt.close('all')这类关闭绘图窗口的语句
3. 调整Matplotlib布局参数
多余垂直空间可以通过以下方式消除:
- 在
plt.show()前添加plt.tight_layout(),自动适配子图间距 - 或者手动调整间距:
fig.subplots_adjust(hspace=0.1, wspace=0.1)(可根据需求修改数值) - 确保
figsize参数设置合理,太小的画布会压缩子图,建议设置为(12,12)或更大
内容的提问来源于stack exchange,提问作者Jonathan Chan
相关产品推荐
相关产品推荐

