最近在centos上部署了一个绘图服务,但是中文显示一直有问题。
经过一段时间的折腾(liunx安装字体),仍然没有解决这个问题(实在太笨了)。
最终换了一个思路(类比android中字体的加载),找到了通用的解决方法。
核心思路是加载一个ttf文件,修改显示中文的函数的字体参数。
- 效果演示
- 源码地址
- 核心代码(覆盖字体参数)
self.font = fm.FontProperties(fname=font_file)
plt.legend = functools.partial(plt.legend,prop=self.font)
plt.title = functools.partial(plt.title,fontproperties=self.font)
plt.xlabel = functools.partial(plt.xlabel,fontproperties=self.font)
plt.ylabel = functools.partial(plt.ylabel,fontproperties=self.font)
plt.text = functools.partial(plt.text,fontproperties=self.font)
plt.annotate = functools.partial(plt.annotate,fontproperties = self.font)
我们可以看到,通过fm加载一个字体文件,然后使用functools默认填充相关参数,就可以将这套代码部署到任何平台。而不依赖于平台的字体了。
总结
- 类比是一个好方法,当我们在尝试解决问题的时候,要尝试着和以前的事物进行类比。