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

Matplotlib图表标题和标签无法渲染Noto Color Emoji表情符号的问题求助

Matplotlib图表标题和标签无法渲染Noto Color Emoji表情符号的问题求助

各位好,我最近在Matplotlib里尝试渲染带表情符号的图表标题时碰了壁,想请大家帮忙排查下问题。

最开始我用Matplotlib自带的DejaVu Sans字体时,每次保存图表都会弹出这样的警告:

UserWarning: Glyph 127957 (\N{CAMPING}) missing from font(s) DejaVu Sans.

为了修复这个缺失emoji的问题,我手动把Noto Color Emoji的ttf文件放到了虚拟环境的Matplotlib字体目录(路径是:.venv/lib/python3.11/site-packages/matplotlib/mpl-data/fonts/ttf),之后删除了Matplotlib的缓存并强制它重新索引字体,现在那个警告确实消失了,而且我也确认Matplotlib能找到这个字体。

但新的问题出现了:不管我是全局通过rcParams设置字体家族,还是在set_titlefontdict里单独指定,标题里的大部分表情符号都显示为空白,只有DejaVu Sans本身支持的少数emoji能正常显示。我试过调换两种字体的顺序,也试过只指定Noto Color Emoji(但这样不仅英文字母完全显示不出来,emoji还是没效果)。

另外我还看到有资料说用Cairo后端能解决emoji渲染的问题,但我切换后端后情况也没任何变化。感觉这像是Matplotlib和Noto Color Emoji之间有兼容问题,但我肯定漏了什么关键步骤,有没有大佬遇到过类似情况?

以下是我的测试代码:

import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.rcParams.update({
    'font.family': ['Noto Color Emoji', 'DejaVu Sans'],
})

fig, ax = plt.subplots()
ax.set_title('a 殺✌️⚽️刺 b', fontdict={'family': ['DejaVu Sans', 'Noto Color Emoji']})
plt.show()

运行这段代码后,图表标题里的emoji大多显示为空白,只有极少数DejaVu Sans原生支持的符号能正常显示。

备注:内容来源于stack exchange,提问作者Eye4got

火山引擎 最新活动