树莓派3上Matplotlib简单代码无法运行问题求助
解决树莓派3上Matplotlib图形显示问题
先给你拆解下问题根源:
- 用
TkAgg后端报错,是因为TkAgg依赖X11图形桌面环境,如果树莓派没启动桌面,或者远程连接没开启图形转发,系统找不到$DISPLAY环境变量(这个变量负责告诉程序把图形输出到哪个屏幕),自然就报错了。 - 换成
Agg后端不报错但看不到图,是因为Agg是无交互后端,它只能生成图像文件,根本不支持弹出窗口显示图形——就像打印机只能输出纸质文件,没法给你实时投屏预览一样。
下面分三种常见场景给你对应的解决办法:
场景1:树莓派本地接了屏幕,想直接弹出图形窗口
- 先确保树莓派启用桌面环境:
终端运行sudo raspi-config,依次选择System Options→Boot / Auto Login,设置为Desktop Autologin或者Desktop,重启后生效。 - 补装Tkinter的系统依赖:
运行sudo apt-get install python3-tk(如果用Python2就换成python-tk)。 - 代码里不用强制指定后端,直接运行即可:
此时桌面环境会自动识别import matplotlib.pyplot as plt plt.plot([1,2,3],[5,6,7]) plt.show()TkAgg后端,弹出图形窗口。
场景2:远程SSH连接树莓派,想在本地电脑显示图形
这种情况需要开启X11图形转发,把树莓派的图形输出转到你的本地电脑:
- 本地电脑先安装X服务器软件:Windows用Xming,Mac用XQuartz,Linux系统自带无需额外安装。
- 连接树莓派时加上
-X参数:ssh -X pi@你的树莓派IP地址 - 检查树莓派的SSH配置允许转发:
编辑/etc/ssh/sshd_config,确保X11Forwarding yes和X11DisplayOffset 10这两行没有被注释(去掉前面的#),然后重启SSH服务:sudo systemctl restart sshd。 - 代码无需修改,直接运行就能在本地电脑看到弹出的图形窗口。
场景3:不需要显示图形,只需要生成图片文件
如果只是要保存图像,用Agg后端就行,但要加上保存命令,别指望plt.show()能显示:
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt plt.plot([1,2,3],[5,6,7]) plt.savefig('my_plot.png') # 把图保存为当前目录下的my_plot.png # plt.show() # 这行可以删掉,Agg后端下它没有作用
最后给你个小技巧:如果不确定当前环境支持哪些后端,可以运行这段代码查看:
import matplotlib print("所有支持的后端:", matplotlib.rcsetup.all_backends) print("当前使用的后端:", matplotlib.get_backend())
内容的提问来源于stack exchange,提问作者R A




