关于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时,它们将被重建,并且(应该)现在包含更新的字体。