【发布时间】:2015-07-16 18:12:10
【问题描述】:
确实,关于 Matplotlib 和非 ascii 字符的故事永无止境:
1) 本地主机:Mac OS X:默认情况下,缺少某些字符(替换为 [])。好的,添加matplotlib.rc('font', family='Verdana') 字符后显示正常。但是,当部署到生产服务器时,事情又会被破坏。
2) 服务器:Linux(openSUSE,使用:matplotlib.use('Agg'),服务 png 和 pdf,Django 应用程序):现在调用 matplotlib.rc('font', family='Verdana') 没有帮助(为什么?)。我什至将一些核心字体从 Mac 复制到 openSUSE 以确保它们是相同的。
这有点帮助:
import matplotlib.font_manager as fm
fp = fm.FontProperties(fname="/usr/share/fonts/truetype/Verdana.ttf")
# matplotlib.rcParams['font.family'] = fp.get_name()
matplotlib.rc('font', family=fp.get_name())
然后对每个地块/块使用每个部分plt.title(_title, fontproperties=fp)。这很累人……更糟糕的是,它在处理传奇时无法使用。例如,没有办法(有吗?)这样使用它:
ax.legend([charts], [_label], fontproperties=fp)
和
ax.legend([charts], [_label], prop={'family': 'Verdana'}
没有任何效果(不过它适用于 Mac OS X)。
有趣的是,大多数非 ascii 字符都可以正常显示(ščřž...),只有 ě、ť、ď...我不介意回到 90 年代,但现在是 2015 年,不能正确使用变音符号是痛苦的。
为什么“钩子”在 OS X 下可以工作,而在 openSUSE 服务器中却没有任何作用?
【问题讨论】:
-
是系统找不到合适的字体问题。
-
我把它固定在服务器上,现在可以肯定了。因为我将这个项目也移到了我的第二台装有 openSUSE 的笔记本电脑上,并且它在开发服务器和 Apache 中都按预期工作。所以它必须与服务器相关。不过,不知道出了什么问题。服务器没有运行 Xorg,没有安装在那里。我发现 Freetype 是昨天才安装的。
-
您可能需要重新运行系统级别
fc-cache并删除 mpl 保存其字体缓存的位置(import matplotlib.font_manager as fm然后fm.cachedir删除该文件中的所有内容并重试)。跨度> -
谢谢你,你让我大开眼界,伙计。因为你让我想到:我一直盲目地删除
/root/.cache/...中的缓存,但这不是正确的查看位置,因为服务器不是在 root 下运行的,omfg。好吧,我将缓存路径打印为情节标题并砰的一声:/var/lib/wwwrun/.cache/matplotlib。删除此文件夹以及同一路径中的fontconfig文件夹后,一切正常。谢谢!
标签: python unicode matplotlib