You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:45:57