You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

树莓派3上Matplotlib简单代码无法运行问题求助

解决树莓派3上Matplotlib图形显示问题

先给你拆解下问题根源:

  • TkAgg后端报错,是因为TkAgg依赖X11图形桌面环境,如果树莓派没启动桌面,或者远程连接没开启图形转发,系统找不到$DISPLAY环境变量(这个变量负责告诉程序把图形输出到哪个屏幕),自然就报错了。
  • 换成Agg后端不报错但看不到图,是因为Agg无交互后端,它只能生成图像文件,根本不支持弹出窗口显示图形——就像打印机只能输出纸质文件,没法给你实时投屏预览一样。

下面分三种常见场景给你对应的解决办法:

场景1:树莓派本地接了屏幕,想直接弹出图形窗口

  1. 先确保树莓派启用桌面环境:
    终端运行sudo raspi-config,依次选择System OptionsBoot / Auto Login,设置为Desktop Autologin或者Desktop,重启后生效。
  2. 补装Tkinter的系统依赖:
    运行sudo apt-get install python3-tk(如果用Python2就换成python-tk)。
  3. 代码里不用强制指定后端,直接运行即可:
    import matplotlib.pyplot as plt
    plt.plot([1,2,3],[5,6,7])
    plt.show()
    
    此时桌面环境会自动识别TkAgg后端,弹出图形窗口。

场景2:远程SSH连接树莓派,想在本地电脑显示图形

这种情况需要开启X11图形转发,把树莓派的图形输出转到你的本地电脑:

  1. 本地电脑先安装X服务器软件:Windows用Xming,Mac用XQuartz,Linux系统自带无需额外安装。
  2. 连接树莓派时加上-X参数:
    ssh -X pi@你的树莓派IP地址
    
  3. 检查树莓派的SSH配置允许转发:
    编辑/etc/ssh/sshd_config,确保X11Forwarding yesX11DisplayOffset 10这两行没有被注释(去掉前面的#),然后重启SSH服务:sudo systemctl restart sshd
  4. 代码无需修改,直接运行就能在本地电脑看到弹出的图形窗口。

场景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

火山引擎 最新活动