python matplotlib标签/标题错误的字符

时间:2013-02-06 16:12:26

标签: python character-encoding matplotlib label

这是this question的部分交叉 以下是我的代码的最小示例:

import matplotlib.pyplot as plt

x = [0.0, 0.25, 0.5, 0.75, 1.0]
y = [7.0, 3.0, 5.0, 1.0, 0.0]

II = 2

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y)

# un-comment title as needed:
#plot_title = r"A$_" + str(II) + r"$"
#plot_title = "A$_" + str(II) + "$"
plot_title = (r"A$_%s$" % (str(II)))
print plot_title
plt.title(plot_title)
plt.show()  

同一个plot-title-string有三个不同版本。上面的print plot_title为每种情况提供了正确的原始字符串:

A$_2$  

但是,这些方法都没有在图中显示正确的字符串(独立于我使用的后端)。图中的输出显示了输入整数值和输出之间的这种关系:

$0$ -> E  
$1$ -> £  
$2$ -> N  
$3$ -> ®  
$4$ -> X  
$5$ -> ¸(cedille)  
$6$ -> b  
$7$ -> ¿  
$8$ -> j  
$9$ -> 3  

我正在使用python 2.6.6和matplotlib 0.99.1.1 - 我无法控制这些版本,并且将与它们有关。
我该如何更改输入以获得所需的输出?

修改

this question/answer的启发,我尝试了系统知道的所有不同字体:

import matplotlib.font_manager as font_manager  

for i in range(0,len(sorted(font_manager.findSystemFonts()))):
    plt.rcParams['font.family'] = os.path.basename(sorted(font_manager.findSystemFonts())[i])[:-4]  

并为每种字体和上面的例子生成了一个图。虽然我为文本提供了不同的字体,但我关注的一个下标$_2$没有更改,并且始终显示为 N

编辑2
我已升级到matplotlib 1.3.0,问题就消失了。这让我觉得它与0.99.1.1版本有关 对我而言,这仍然不能令人满意,因为我本来希望知道为什么以这种方式行事。

编辑3
我遇到了这个问题:Superscript in Python plots
答案表明,使用A$_2$代替$A_2$可能会产生问题 不幸的是,在这种情况下,这并没有改变输出。

2 个答案:

答案 0 :(得分:4)

我正在使用matplotlib版本1.3.1和python版本2.7.8 我遇到了类似的问题。我在写

ax1.set_yticklabels(['$10^4$','$10^5$','$10^6']$'

1将呈现为phi符号。 0将呈现为E. 4将呈现为Xi ...依此类推。

我能够修复'它通过使用'$\mathregular{10}^\mathregular{4}$'这是一种繁琐但它完成工作。

答案 1 :(得分:3)

我有类似的问题。这个最小的例子:

from matplotlib.pyplot import *
subplot( 111, title=r"$\mathcal{O}\left( N^3 \right)$" )
show()

呈现给:

enter image description here

在开头添加matplotlib.rc('text', usetex=True)解决了我的问题:

from matplotlib.pyplot import *
matplotlib.rc('text', usetex=True)
subplot( 111, title=r"$\mathcal{O}\left( N^3 \right)$" )
show()

enter image description here

这一行使matplotlib使用LaTeX而不是内部mathtext引擎,它似乎是LaTeX的一个子集,尽管上标应该仍然有效。使用LaTeX需要一个有效的LaTeX安装,以及dvipng和ghostscript,它也比较慢。因此,如果您仍然安装了这些先决条件,那么此解决方案可能值得尝试。

我打开了一个问题here

经过一段时间成本高昂的测试后,我发现,将fonts-lyx 2.2.0-2降级为2.1.4-2也解决了我的问题。 fonts-lyxpython-matplotlib-data的依赖项,但未指定特定版本,从而导致此问题。虽然我没有足够的技术知识可以说明字体的哪些更改与使用它的程序不兼容。