【问题标题】:Matplotlib and non-ascii charactersMatplotlib 和非 ascii 字符
【发布时间】: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


【解决方案1】:

matplotlib 找不到正确的字体可能是由于字体缓存过时造成的(这是我们需要更好地解决的问题)。

要找到你的缓存是做什么的

import matplotlib.font_manager as fm
print(fm.cachedir)  # or other way of getting the text out

然后删除那个目录下字体相关的内容。它们将在您下次导入 matplotlib 时重新构建,并且(应该)现在包含更新的字体。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多