3

这是对此问题的部分交叉帖子。
这是我的代码的最小示例:

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——我无法控制这些版本,并且必须与它们有关。
我应该如何更改输入以获得所需的输出?

编辑

这个问题/答案的启发,我尝试了我的系统知道的所有不同字体:

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
我遇到了这个问题:Python 绘图中
的上标答案表明问题可能来自使用A$_2$而不是$A_2$.
不幸的是,在这种情况下,这并没有改变输出。

4

2 回答 2

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}$'which 来“修复”它,这有点麻烦,但它可以完成工作。

于 2014-09-10T19:21:33.570 回答
3

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

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

被渲染为:

在此处输入图像描述

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

在此处输入图像描述

这一行使 matplotlib 使用 LaTeX 而不是内部的数学文本引擎,这似乎是 LaTeX 的一个子集,尽管上标仍然可以工作。使用 LaTeX 需要安装工作正常的 LaTeX,以及 dvipng 和 ghostscript,而且速度较慢。因此,仅当您无论如何都安装了这些先决条件时,此解决方案才值得尝试。

在这里打开了一个问题。

经过一些耗时的测试后我发现,从 降级fonts-lyx 2.2.0-22.1.4-2也解决了我的问题。fonts-lyx是 的依赖python-matplotlib-data,但是没有指定具体的版本,导致这个问题。尽管我没有足够的技术知识来说明字体的哪些更改与使用它的程序不兼容。

于 2016-08-25T10:57:52.897 回答