Unicode不在png中显示

时间:2015-03-24 10:57:23

标签: python unicode matplotlib

我有一个函数可以将指数从1e + N更改为1x10 ^ N,其中N将是unicode上标N:

# -*- coding: utf-8 -*
try:
    unicode
except:
    unicode = str

_superscripts = u'⁻⁰ⁱ²³⁴⁵⁶⁷⁸⁹'
_superscript_map = dict(zip(map(ord, u'-0123456789'), _superscripts))

def to_fancy(number, fmt='e'):
    as_str = ('{:' + fmt + '}').format(number)
    as_str, _, exponent = as_str.partition('e')
    if exponent:
        exponent = unicode(int(exponent.replace('+', '')))
        exponent = exponent.translate(_superscript_map)
        as_str += u'×10' + exponent
    return as_str

如果我然后使用此值绘制带有标题的图表,即:

plt.figure(1)
plt.title(to_fancy(1e+18))

xwindow上的输出看起来很好(这是使用MacOSx后端)。

Title shows fine

但是当我以正常方式将图形保存为.png文件时,它会将unicode渲染为空框:

Failed Unicode Rendering

1 个答案:

答案 0 :(得分:0)

由于上面提供的提示,管理找到修复程序。对此进行排序的最简单方法是使用TeX unicode格式。我之前尝试过这个,但由于路径问题,我的TeXShop发行版决定不应该安装到通常的位置,因此无效。

确保路径中包含以下内容:

  1. Ghostscript的
  2. kpsewhich
  3. dvipng
  4. 然后设置以下参数:

    rcParams['text.usetex']=True
    rcParams['text.latex.unicode']=True
    

    这很慢,并不理想,因为字体太可怕了。但它至少可以防止出现在输出中的方框。