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

Linux服务器运行matplotlib代码plt.show()无法显示图像

问题原因

出现这个问题的核心原因是你当前使用的Linux服务器是纯命令行无图形界面环境,matplotlib默认的交互后端无法完成窗口渲染:

  • 本地VSCode运行时,机器自带桌面图形环境,matplotlib会自动调用TkAgg/Qt5Agg这类带窗口交互能力的后端,直接弹出图像窗口
  • 无桌面的Linux服务器默认没有部署X11图形显示服务,plt.show()找不到可用的显示输出通道,既不会报错也不会弹出图像,通常会直接静默卡住。
解决方法

根据你的使用需求选对应方案即可:

  • 方案1:不需要实时弹窗,直接保存图像到本地(最通用,无额外依赖)
    无GUI环境下直接把matplotlib切换为非交互的Agg渲染后端,不需要调用图形窗口,渲染完成后直接把图像写入文件即可。注意:后端设置代码必须在导入pyplot之前执行,否则不生效。
    调整后可直接运行的代码:

import torch
import torchvision
import torchvision.transforms as transforms

import numpy
import matplotlib

提前设置非交互渲染后端

matplotlib.use('Agg')
import matplotlib.pyplot as plt

torch.set_printoptions(linewidth=120)

train_set = torchvision.datasets.FashionMNIST(
root='./data/FashionMNIST',
train=True,
download=True,
transform=transforms.Compose([
transforms.ToTensor()
])
)

train_loader = torch.utils.data.DataLoader(
train_set, batch_size=10
)

sample = next(iter(train_set))
image, label = sample

plt.imshow(image.squeeze(), cmap='gray')

替换原plt.show()逻辑,将渲染结果保存为图片文件

plt.savefig('./fashion_mnist_sample.png')
print(f"label:{label}")

运行完成后会在代码执行目录生成`fashion_mnist_sample.png`文件,通过scp、sftp等方式把文件传到本地电脑就能查看。
- 方案2:服务器端使用Jupyter类交互式笔记环境
直接在代码最开头加`%matplotlib inline`魔法命令,不需要修改其他代码,图像会直接内嵌在笔记的输出单元格中展示,不需要弹窗也不需要手动存文件。
- 方案3:需要和本地运行一致的实时弹窗效果
配置X11转发,把服务器端的图形输出转发到本地机器显示:
1. 本地机器安装X11服务端:Windows系统安装VcXsrv,Mac系统安装XQuartz,安装完成后启动X11服务保持后台运行
2. SSH连接服务器时加上X11转发参数:`ssh -X 你的用户名@服务器IP`
3. 服务器端安装基础图形依赖:Debian/Ubuntu系执行`sudo apt update && sudo apt install python3-tk x11-apps`,CentOS/RHEL系执行`sudo dnf install python3-tkinter xorg-x11-apps`
4. 配置完成后直接运行原代码,图像窗口会直接弹出在你的本地桌面上。

内容的提问来源于stack exchange,提问作者Arist12
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:27:35