Ubuntu服务器Matplotlib生成含泰文柱状图字体缺失问题求助
解决Matplotlib在Ubuntu服务器上的Tahoma字体缺失及泰文渲染问题
我来帮你搞定这个Matplotlib字体的问题,你遇到的情况在无图形界面的Ubuntu服务器上太常见了,咱们一步步来排查修复:
1. 先确认Tahoma字体是否真的安装到位
你虽然执行了sudo apt install msttcorefonts -qq,但有时候这个包的安装可能因为网络或者配置问题没完全成功,咱们验证一下:
- 先更新系统字体缓存:
fc-cache -fv - 然后搜索系统里的Tahoma字体:
fc-list | grep -i tahoma
如果没有输出,说明Tahoma根本没装成功。这时候可以尝试重新安装msttcorefonts,或者手动下载Tahoma的TTF字体文件(比如从Windows系统复制,或从可信字体源获取),放到Ubuntu的字体目录(比如/usr/share/fonts/truetype/tahoma/),之后再执行fc-cache -fv更新缓存。
2. 直接在代码里指定字体文件(最稳妥的方案)
如果系统字体查找总是出问题,咱们可以绕开它,直接在代码里指定Tahoma字体文件的路径,这样就不用依赖系统字体配置了:
修改你的代码如下:
import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties import numpy as np # 先设置后端为Agg(服务器无图形界面必须) mpl.use('Agg') # 加载Tahoma字体文件,替换成你的字体文件实际路径 tahoma_font = FontProperties(fname='/path/to/your/Tahoma.ttf') site = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp', 'จาวาสคลิป') usage = [10,8,6,4,2,1, 2] y_pos = np.arange(len(site)) plt.bar(y_pos, usage, align='center') # 给x轴标签指定字体 plt.xticks(y_pos, site, fontproperties=tahoma_font) # 给y轴和标题也指定字体 plt.ylabel('Percent', fontproperties=tahoma_font) plt.title('Test', fontproperties=tahoma_font) plt.tight_layout() plt.savefig('test.png') plt.cla()
这样不管系统有没有装Tahoma,只要字体文件存在,就能正常渲染,包括泰文字符。
3. 改用Ubuntu自带的泰文支持字体
如果不想折腾Tahoma,也可以直接用Ubuntu支持泰文的开源字体,比如Loma、Garuda这些,它们对泰文的渲染兼容性更好:
- 先安装泰文字体包:
sudo apt install fonts-thai-tlwg -y - 然后修改代码里的字体配置:
mpl.rc('font', family='Loma') # 或者用'Garuda'
这样既不用依赖微软的Tahoma,也能解决泰文字形缺失的问题。
4. 彻底重置Matplotlib字体缓存
你已经删了~/.cache/matplotlib,但有时候可以再强制Matplotlib重建缓存,在代码开头加上:
from matplotlib.font_manager import _rebuild _rebuild() # 强制重建字体缓存,注意这是内部函数,版本不同可能有变化
然后重启Python进程运行代码,确保新安装的字体被Matplotlib识别到。
内容的提问来源于stack exchange,提问作者Kaow
相关产品推荐
相关产品推荐

