【问题标题】:Non-ASCII characters in MatplotlibMatplotlib 中的非 ASCII 字符
【发布时间】:2012-06-13 04:46:09
【问题描述】:

我在 Matplotlib 中显示非ASCII 字符时遇到问题,这些字符呈现为小框而不是正确的字体,看起来像(我用红色油漆填充了这些框以突出显示它们):

我该如何解决?

一个相关的问题是Accented characters in Matplotlib

【问题讨论】:

    标签: python unicode matplotlib ascii


    【解决方案1】:

    这个问题实际上可能有几个不同的原因:

    默认字体不包含这些字形

    您可以使用以下方法更改默认字体(在任何绘图完成之前!)

    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 -*-
    

    【讨论】:

    • 根据docs,可以直接传递字体名称而不是家族。这对我有用:matplotlib.rc('font', family='DejaVu Sans')
    • 这绝对是更好的语法!我会留下旧的,以防某些古老的 matplotlib 版本确实需要它。
    • 如果你想避免添加u,使用这个:from future import unicode_literals
    猜你喜欢
    • 1970-01-01
    • 2014-06-12
    • 2012-01-23
    • 2010-10-18
    • 2012-12-31
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多