gpt4 book ai didi

python - Matplotlib 数学文本 : Glyph errors in tick labels

转载 作者:太空狗 更新时间:2023-10-29 21:41:40 26 4
gpt4 key购买 nike

我在 matplotlib 2.0.2 中使用默认 mathtext 渲染数学时观察到错误而不是 LaTeX数学渲染引擎。数学文本似乎无法识别某些字形(在我的例子中是减号和乘号)。真正奇怪的是,只有当这些特定字形出现在刻度标签中时才会发生错误。当我故意输入一些数学表达式时图标题,它工作正常。

考虑下面的示例和生成的图像:

import matplotlib
import matplotlib.pyplot as plt

# Customize matplotlib
matplotlib.rcParams.update({# Use mathtext, not LaTeX
'text.usetex': False,
# Use the Computer modern font
'font.family': 'serif',
'font.serif': 'cmr10',
'mathtext.fontset': 'cm',
})

# Plot
plt.semilogy([-0.03, 0.05], [0.3, 0.05])
plt.title(r'$-6\times 10^{-2}$')
plt.savefig('test.png')

test.png

如图所示,刻度标签中的乘法和一些减号已被其他字符替换。如果我使用 LaTeX(通过将 'text.usetex' 设置为 True),一切都呈现得很好。为什么会发生这种情况,更重要的是,如何在不从 mathtext 更改为 LaTeX 的情况下修复它?

附加信息

这是运行示例代码时打印的警告:

mathtext.py:866: MathTextWarning: Font 'default' does not have a glyph for '\times' [U+d7]
MathTextWarning)
mathtext.py:867: MathTextWarning: Substituting with a dummy symbol.
warn("Substituting with a dummy symbol.", MathTextWarning)

请注意,指数中出现的减号可以正确呈现。如果我省略 'mathtext.fontset': 'cm',这些也可能不会呈现,产生另一个类似的警告:

mathtext.py:866: MathTextWarning: Font 'default' does not have a glyph for '-' [U+2212]
MathTextWarning)
mathtext.py:867: MathTextWarning: Substituting with a dummy symbol.
warn("Substituting with a dummy symbol.", MathTextWarning)

此外,如果我在 rcParams 中包含 'axes.unicode_minus': False(并保留 'mathtext.fontset': 'cm'),所有减号都正确呈现,但乘号仍然存在问题。

乘号错误在旧版本的 matplotlib 上似乎不是问题(我测试过 1.5.1、1.4.3 和 1.3.1)。然而,这些 matplotib 坚持只在 10⁻²、10⁻¹、1、10、10² 等处生成刻度标签,因此不需要乘号。

错误报告

这已作为 bug report 提交到 Matplotlib。

最佳答案

我发现 STIX 字体是可接受的计算机现代字体替代品。

import matplotlib
import matplotlib.pyplot as plt

# Customize matplotlib
matplotlib.rcParams.update(
{
'text.usetex': False,
'font.family': 'stixgeneral',
'mathtext.fontset': 'stix',
}
)

# Plot
plt.semilogy([-0.03, 0.05], [0.3, 0.05])
plt.title(r'$-6\times 10^{-2}$')
plt.savefig('test.png')

这会在我的笔记本电脑上产生以下输出:

enter image description here

关于python - Matplotlib 数学文本 : Glyph errors in tick labels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com