关于Matplotlib和非ascii角色的故事永无止境,确实如此:

1)Localhost: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字符都可以很好地显示(ščřž…),仅在ě,ť,ď时才出现问题。为什么Matplotlib的unicode仍然有这些问题?我不会回想90年代,但那是2015年,不能正确使用变音符号是痛苦的。

为什么“挂钩”在OS X下工作,但在openSUSE服务器中没有任何作用?

最佳答案

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

要查找您的缓存是

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


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

07-28 01:26
查看更多