Matplotlib和非ascii字符

时间:2015-07-16 18:12:10

标签: python unicode matplotlib

关于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())

然后对每个绘图/块使用每个partes 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服务器中没有任何影响?

1 个答案:

答案 0 :(得分:1)

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

要查找您的缓存是否已

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

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