Python Matplotlib原胶乳“\“ε”;“只有收益”\varepsilon“;

Python Matplotlib原胶乳“\“ε”;“只有收益”\varepsilon“;,python,matplotlib,latex,macports,Python,Matplotlib,Latex,Macports,我正在使用Matplotlib分析结果并生成图形。我需要图例和轴标签中的希腊符号,包括$\epsilon$。但是,结果文本没有区分“normal”\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 * n

我正在使用Matplotlib分析结果并生成图形。我需要图例和轴标签中的希腊符号,包括$\epsilon$。但是,结果文本没有区分“normal”\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(安装了Macports的TexLive和py27 matplotlib的OS X El Capitan)上处理此问题时,除了\epsilon之外,所有内容都正确呈现


ETA:代码在另一台机器(科学Linux)上执行正确的操作。

默认情况下,matplotlib使用一些相当基本的引擎来解析标签(不确定它到底是什么)。通过在打印/渲染之前添加
plt.rc('text',usetex=True)
,可以切换到“普通”tex引擎。您的脚本将执行得稍慢一些,但您可以完全访问latex功能


编辑:默认情况下使用。

您的脚本中没有使用TeX。Matplotlib提供了所谓的LaTeX命令子集,以普通UTF8字符呈现。这是MathText在使用默认字体集时的外观:

您可以更改字体集,使“\varepsilon”的外观与“\epsilon”不同。然而,在可用的字体集中,似乎只有“cm”实际具有这些命令的不同符号

plt.rcParams["mathtext.fontset"] = "cm"
这将产生:


为了让Latex用于渲染文本,您需要特别告诉matplotlib这样做。一个选择是使用

plt.rcParams["text.usetex"] =True
在脚本的开头。这需要一个可工作的TeX安装。
然后,示例将如下所示,“\varepsilon”和“\epsilon”实际上是不同的


接受的答案正确地解释了
\varepsilon
\epsilon
的解释如何取决于matplotlib mathtext字体集

“更大的图景”的原因是ε的最常见形式是ε,但Knuth出于某种原因决定在TeX中使用ϵ作为
\epsilon
。这造成了一些混乱。在实际的希腊文本中,它们只是文体变体,而作为数学符号,它们可以有不同的含义。因此,Unicode包含这两个符号。在希腊文部分,
U+3B5
希腊文小写字母EPSILON为ε,而
U+03F5
希腊文新月形EPSILON符号为ϵ。也可以在Unicode的数学字母数字符号部分找到这两种符号的变体

如果在Python源代码中使用Unicode字符,而不是TeX样式的助记符,则将获得正确的符号

t=np.arange(0.0,1.0+0.01,0.01)
s=np.cos(4*np.pi*t)+2
图=plt.图(图尺寸=(4,3))
ax=图add_子批次(1,1,1)
ax.绘图(t,s,'k-',线宽=2.0,标签='$ϵ$,$ε$,$ν$,$φ$,$σ$,$ς$)
项目名称(“$ϵ$,$ε$,$Ф$,$φ$,$σ$,$ς$”)
plt.xlabel(r'$t[M]$)
plt.ylabel(“$ϵ$,$ε$,$ν$,$φ$,$σ$,$ς$”)
ax.图例(ncol=2,loc='左下角',fancybox=True)
plt.紧_布局()
plt.savefig('希腊文.png')

谢谢!我一直都有一个可用的LaTeX安装,所以我没有想到这里没有访问它。奇怪的是,MathText对\epsilon有这样一个小小的怪癖,而它对其他具有变体形式的希腊字母却很好。没错,MathText中还有使用\varepsilon的选项。您需要选择不同的字体集。我更新了answer.BTW,您链接到的MathText页面仍然声称\epsilon可用(不同于\varepsilon)。因此,失败似乎在于MathText如何实现它,而它在我的Macbook上使用的字体系列失败了。我在matplotlob用户列表存档中发现了这一点,有人建议在用户的matplotlibrc文件中切换font.sans(对我不起作用):ETA:您在编辑的评论中提到了这一点。我可能会尝试使用“cm”而不是我发现的存档讨论中建议的DejaVu SAN。你是说
[“mathtext.fontset”]=“cm”
在mac上不起作用?那是一个卑鄙的家伙。在这种情况下,你可能需要使用真正的乳胶。对不起,我不清楚。失败的是我试图使用“似曾相识的Sans”,这是我在旧邮件列表讨论中发现的建议。然而,“cm”确实有效,而且肯定比等待整个TeX编译要快。