我正在使用Matplotlib分析结果&生成数字。我需要图例和轴标签中的希腊符号,包括$ \ epsilon $。但是,生成的文本不区分“正常”\ epsilon和\ varepsilon ---它们都显示为\ varepsilon。这是一个最小的例子:
import numpy as np
from pylab import *
import matplotlib.pyplot as plt
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(t, s, 'k-', linewidth=2.0, label=r'$\epsilon$, $\varepsilon$, $\phi$, $\varphi$, $\sigma$, $\varsigma$')
plt.title(r'$\epsilon$, $\varepsilon$, $\phi$, $\varphi$, $\sigma$, $\varsigma$')
plt.xlabel(r'$t [M]$')
plt.ylabel(r'$\epsilon$, $\varepsilon$, $\phi$, $\varphi$, $\sigma$, $\varsigma$')
ax.legend(ncol=2, loc='lower left', fancybox=True)
plt.show()
当我在我的Macbook(OS X El Capitan,Macports安装的TexLive和py27-matplotlib)上进行处理时,一切都正确呈现,除了 \ epsilon。
ETA:代码在不同的机器上做正确的事(Scientific Linux)。
答案 0 :(得分:6)
您没有在脚本中使用TeX。 Matplotlib提供了所谓的MathText,它是LaTeX命令的子集,以普通的UTF8字符呈现。这就是使用默认字体集MathText的样子:
您可以将字体集更改为" \ varepsilon"看起来与" \ epsilon"不同。但是,似乎在可用的字体集中,只有" cm"这些命令实际上有不同的符号。
plt.rcParams["mathtext.fontset"] = "cm"
这将产生:
<小时/> 为了让Latex用于渲染文本,您需要专门告诉matplotlib这样做。一种选择是使用
plt.rcParams["text.usetex"] =True
在脚本的开头。这需要一个有效的TeX安装 这个例子看起来像这样,其中&#34; \ varepsilon&#34;和&#34; \ epsilon&#34;确实不同。
答案 1 :(得分:2)
默认情况下,matplotlib使用一些相当基本的引擎来解析你的标签(不确定它是什么)。您可以在绘图/渲染之前添加origin/master
来切换到“普通”tex引擎。您的脚本执行速度会慢一些,但您可以完全访问latex功能。
编辑:默认使用mathtext。
答案 2 :(得分:0)
接受的答案正确地说明了\varepsilon
和\epsilon
的解释如何取决于matplotlib mathtext字体集。
“大图”原因与epsilon最常见的形式是ε有关,但是Knuth出于某种原因决定使用 ϵ 作为\epsilon
在TeX中。这造成了一些混乱。在实际的希腊语文字中,它们只是样式上的变体,而作为数学符号,它们可以具有不同的含义。因此,Unicode包括两个符号。在希腊文部分中,U+3B5
希腊小写字母epsilon 是ε,而U+03F5
希腊小写字母EPSILON符号是< strong> ϵ 。两者的变体也可以在Unicode的“数学字母数字符号”部分找到。
如果您在Python源代码中使用Unicode字符而不是TeX样式的助记符,则会得到正确的符号。
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2
fig = plt.figure(figsize=(4, 3))
ax = fig.add_subplot(1,1,1)
ax.plot(t, s, 'k-', linewidth=2.0, label='$ϵ$, $ε$, $ϕ$, $φ$, $σ$, $ς$')
plt.title('$ϵ$, $ε$, $ϕ$, $φ$, $σ$, $ς$')
plt.xlabel(r'$t [M]$')
plt.ylabel('$ϵ$, $ε$, $ϕ$, $φ$, $σ$, $ς$')
ax.legend(ncol=2, loc='lower left', fancybox=True)
plt.tight_layout()
plt.savefig('greek.png')