SSH远程连接树莓派时Matplotlib绘图无法显示的问题
解决SSH远程树莓派Matplotlib绘图无法显示的问题
先给你拆解下你遇到的两种情况:
- 代码1用了
matplotlib.use('Agg'):这是Matplotlib的无显示后端,它只负责处理绘图逻辑,不会弹出任何图形窗口,所以代码能正常跑完,但看不到绘图结果,只会输出start和finished。 - 代码2用了
TkAgg:这是依赖Tkinter的图形渲染后端,但SSH默认没有开启X11图形转发,树莓派找不到可用的图形环境,所以触发了Traceback错误。
下面给你两种可行的解决方案,按需选择:
方案1:开启SSH X11转发(让图形窗口显示在本地电脑)
这个方法是把树莓派的图形界面转发到你本地电脑上,需要你的本地设备支持X11(Windows需安装Xming,Mac自带XQuartz,Linux系统直接支持)。
操作步骤:
- 本地电脑准备X11工具:Windows安装Xming并启动,Mac打开XQuartz,Linux无需额外安装。
- 用带X11转发参数的命令连接树莓派:
ssh -X pi@你的树莓派IP地址
如果用Windows的Putty连接,要在Connection->SSH->X11选项里勾选"Enable X11 forwarding"。
3. 连接成功后,直接运行你的代码2(或者去掉matplotlib.use('TkAgg'),让Matplotlib自动适配图形后端),绘图窗口就会在你的本地电脑上弹出了。
方案2:将绘图保存为图片文件(无需图形界面)
如果不需要实时显示窗口,只需要生成绘图文件,那可以基于代码1的逻辑,加上保存图片的代码替换plt.show():
修改后的代码:
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt print('start') plt.plot([1,2,3,4],[1,4,9,16]) plt.savefig('plot_result.png') # 将绘图保存为PNG图片 print('finished')
运行后,树莓派的当前目录会生成plot_result.png,你可以用scp命令把文件传到本地查看:
scp pi@你的树莓派IP地址:/home/pi/plot_result.png ./本地保存路径
小提示
如果你经常用Matplotlib绘图,可以在树莓派的~/.config/matplotlib/matplotlibrc文件里设置默认后端,避免每次代码里手动指定:
backend: TkAgg
内容的提问来源于stack exchange,提问作者springsr




