在无头设备上使用 matplotlib
matplotlib 是一个被广泛使用的 Python 绘图库,但是在远程服务器等无头设备上使用时,可能会遇到 plt.show()
无法显示和缺少中文字体的问题。本文将介绍如何解决这些问题。
使用 WebAgg 后端进行显示
matplotlib 默认使用的后端是 agg
,但是在无头设备上使用时,这个后端是无法正常工作的。因此,我们需要使用其他后端进行显示。在无头设备上,我们可以使用 WebAgg
后端进行显示。
打开 Python 控制台,输入以下命令:
1 |
|
这个命令会输出 matplotlib 的配置文件路径。将该配置文件复制到 ~/.config/matplotlib/matplotlibrc
,并在其中添加以下内容:
1 |
|
这样,在调用 plt.show()
时,matplotlib 就会在 127.0.0.1:8988
上启动一个 Web 服务器以显示图像,你可以通过 SSH 端口转发(VSCode 提供此功能)或者反向代理来访问该网页。你可以更改配置文件来更改监听的地址和端口。
使用中文字体
无头设备通常没有中文字体,因此在使用中文时,matplotlib 会无法显示。我们需要安装中文字体,然后在 matplotlib 的配置文件中指定使用该字体。本文以 SimHei
字体为例。
安装字体
下载 SimHei.ttf
,在网上搜索即可。将该字体文件复制到 /usr/share/fonts/
目录下。如果你没有服务器的 root 权限,可以将该字体文件复制到 ~/.local/share/fonts/
目录,或在此选择一个目录。
然后找到 matplotlib 的字体缓存:
1 |
|
输出的路径就是字体缓存的路径,删除该文件夹:
1 |
|
下一次使用 matplotlib 时,就会重新生成字体缓存,这时就会包含 SimHei
字体了。但是在这之前,你需要先在 matplotlib 的配置文件中指定使用 SimHei
字体。
指定字体
打开 matplotlib 的配置文件 ~/.config/matplotlib/matplotlibrc
,添加以下内容:
1 |
|
此时,你就可以在 matplotlib 中使用中文了。
Reference
在无头设备上使用 matplotlib
https://blog.caomingjun.com/use-matplotlib-on-headless-machine/