2013-02-06 54 views
3

这是部分交叉发布到this question
这里是我的代码小例子:python matplotlib标签/标题错误字符

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() 

有三个不同版本的同一情节标题字符串的。上述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

EDIT 2
我已经升级到1.3.0 matplotlib和问题走了。这使我认为它必须与版本0.99.1.1
对我来说,这仍然不令人满意,因为我本来想知道为什么它是这样表现。

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

+0

您是否正在使用上述标记,因为您正尝试在图形标题中使用LaTeX?如果是这种情况,您是否在代码的开头尝试了'rc('text',usetex = True)'以在输出中指定LaTeX? – cosmosis

+0

@cosmosis:我不一定需要乳胶,我只需要一些希腊字母和下标。作为一个长期的LaTex用户,这个语法对我来说很简单。我尝试过'rc('text',usetex = True)',但是这个网络的设置中有些东西无法正常工作,因为它会产生很多错误。不幸的是,数学类型并没有真正起作用(请参阅顶部的'cross-post'链接。 – Schorsch

回答

3

我正在使用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}$'这是一种麻烦,但它的工作。

+2

尽管我并不聪明,但它实际上解决了这个问题。 – Schorsch

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使用La TeX,而不是内部的mathtext引擎,它似乎是LaTeX的子集,尽管上标应该仍然有效。使用LaTeX需要LaTeX工作环境,以及dvipng和ghostscript,而且速度较慢。因此,如果您已经安装了这些先决条件,则此解决方案可能只值得尝试。

我开了一个问题here

经过一些耗时的测试,我发现,从fonts-lyx 2.2.0-2降为2.1.4-2也为我解决了这个问题。 fonts-lyxpython-matplotlib-data的依赖项,但没有指定特定的版本,导致此问题。虽然我没有足够的技术知识能够说出字体的更改与使用该字体的程序不相容。