【发布时间】:2012-06-13 04:46:09
【问题描述】:
我在 Matplotlib 中显示非ASCII 字符时遇到问题,这些字符呈现为小框而不是正确的字体,看起来像(我用红色油漆填充了这些框以突出显示它们):
我该如何解决?
一个相关的问题是Accented characters in Matplotlib。
【问题讨论】:
标签: python unicode matplotlib ascii
我在 Matplotlib 中显示非ASCII 字符时遇到问题,这些字符呈现为小框而不是正确的字体,看起来像(我用红色油漆填充了这些框以突出显示它们):
我该如何解决?
一个相关的问题是Accented characters in Matplotlib。
【问题讨论】:
标签: python unicode matplotlib ascii
这个问题实际上可能有几个不同的原因:
默认字体不包含这些字形
您可以使用以下方法更改默认字体(在任何绘图完成之前!)
matplotlib.rc('font', family='Arial')
在某些版本的 matplotlib 中,您必须设置族:
matplotlib.rc('font', **{'sans-serif' : 'Arial',
'family' : 'sans-serif'})
(请注意,因为sans-serif 在**{} 语法中包含连字符,所以实际上是必需的。)
第一个命令将sans-serif 字体系列更改为仅包含一种字体(在我的例子中是Arial),第二个命令将默认字体系列设置为sans-serif。
其他选项包括in the documentation。
您在 Matplotlib 中创建/传递了不正确的字符串对象
即使字体包含正确的字形,如果您忘记使用u 创建Unicode 常量,Matplotlib 也会有这种行为:
plt.xlabel("Średnia odległość między stacjami wsparcia a modelowaną [km]")
所以你需要添加u:
plt.xlabel(u"Średnia odległość między stacjami wsparcia a modelowaną [km]")
另一个原因是您忘记在文件顶部添加UTF-8 魔术注释(我读到了这个might be the source of the problem):
# -*- coding: utf-8 -*-
【讨论】:
matplotlib.rc('font', family='DejaVu Sans')
u,使用这个:from future import unicode_literals