处理文本 - 编写数学表达式
你可以在任何 matplotlib 文本字符串中使用子 TeX 标记,将它放在一对美元符号($
)内。
注意,你不需要安装 TeX,因为 matplotlib 提供了自己的 TeX 表达式解析器,布局引擎和字体。 布局引擎是 Donald Knuth 的 TeX 中的布局算法的一种相当直接的适配版,所以质量是相当不错的(matplotlib 还为那些想要调用 TeX 生成文本的人提供一个usetex
选项(参见使用 LaTeX 渲染文本 )。
任何文本元素都可以使用数学文本。 你应该使用原始字符串(在引号前面加一个'r'
),并用美元符号($
)包围数学文本,如 TeX。 常规文本和数学文本可以在同一个字符串内交错。 Mathtext 可以使用 Computer Modern 字体(来自 (La)TeX),STIX 字体(为与 Times 混合使用而设计)或你提供的 Unicode 字体。 可以使用自定义变量mathtext.fontset
选择 mathtext 字体(请参阅自定义 matplotlib)
注意
在Python的 『narrow』 构建中,如果使用 STIX 字体,你还应该将
ps.fonttype
和pdf.fonttype
设置为 3(默认值),而不是 42。否则一些字符将不可见。
下面是个简单的例子:
# plain text
plt.title('alpha > beta')
生成alpha > beta
。
但是这个:
# math text
plt.title(r'$\alpha > \beta$')
生成 。
注意
Mathtext 应该放在一对美元符号(
$
)之间。 为了易于显示货币值,例如$ 100.00
,如果整个字符串中存在单个美元符号,则它将被逐字显示为美元符号。 这是常规 TeX 的一个小改变,其中非数学文本中的美元符号必须被转义('$'
)。注意
虽然一对美元符号(
$
)内的语法是 TeX 风格的,但是外面的文本不是。 特别是,字符:
# $ % & ~ _ ^ \ { } \( \) \[ \]
在 TeX 中的数学模式之外有特殊的意义。 因此,根据
rcParam text.usetex
标志这些字符的表现有所不同。 更多信息请参阅usetex
教程。
下标和上标
为了制作下标和上标,使用_
或者^
符号:
r'$\alpha_i > \beta_i$'
一些符号会自动将它们的下标或上标放在操作符的底部或顶部,例如,为了编写 0 到无穷的 的和,你可以:
r'$\sum_{i=0}^\infty x_i$'
分数、二项式和堆叠数
可以使用\frac{}{}
,\binomial{}{}
和\stackrel{}{}
命令分别创建分数,二项式和堆叠数字:
r'$\frac{3}{4} \binom{3}{4} \stackrel{3}{4}$'
产生
分数可以任意嵌套:
r'$\frac{5 - \frac{1}{x}}{4}$'
产生
请注意,在分数周围放置圆括号和花括号需要特别注意。 这种明显的方式会产生太小的括号:
r'$(\frac{5 - \frac{1}{x}}{4})$'
解决方案是在括号前面加上\left
和\right
以通知解析器这些括号包含整个对象:
r'$\left(\frac{5 - \frac{1}{x}}{4}\right)$'
根式
根式可以有\sqrt[]{}
产生,例如:
r'$\sqrt{2}$'
方括号内可以(可选地)设置任何底数。 请注意,底数必须是一个简单的表达式,并且不能包含布局命令,如分数或上下标:
r'$\sqrt[3]{x}$'
字体
用于数学符号的默认字体是斜体。
注意
此默认值可以使用
mathtext.default
rcParam
更改。 这是非常有用的,例如,通过将其设置为regular
,使用与常规非数学文本相同的字体作为数学文本。
为了修改字体,例如,以罗马字体编写sin
,使用字体命令来闭合文本:
r'$s(t) = \mathcal{A}\mathrm{sin}(2 \omega t)$'
这里s
和t
是斜体(默认)的变量,sin
是罗马字体,振幅A
是书法字体。 注意在上面的例子中,A
和sin
之间的间距被挤压。 你可以使用间距命令在它们之间添加一些空格:
s(t) = \mathcal{A}\/\sin(2 \omega t)
所有字体的可用选项为:
命令 | 结果 |
---|---|
\mathrm{Roman} | ![]() |
\mathit{Italic} | ![]() |
\mathtt{Typewriter} | ![]() |
\mathcal{CALLIGRAPHY} | ![]() |
使用 STIX 字体时,你也可以选择:
命令 | 结果 |
---|---|
\mathbb{blackboard} | ![]() |
\mathrm{\mathbb{blackboard}} | ![]() |
\mathfrak{Fraktur} | ![]() |
\mathsf{sansserif} | ![]() |
\mathrm{\mathsf{sansserif}} | ![]() |
\mathcircled{circled} | ![]() |
还有三个全局『字体集』可供选择,它们使用matplotlibrc
中的mathtext.fontset
参数进行选择。
cm
: Computer Modern (TeX)
stix
: STIX (为和 Times 混合使用而设计)
stixsans
: STIX sans-serif
此外,你可以使用\mathdefault{...}
或其别名\mathregular{...}
来使用用于 mathtext 之外的常规文本的字体。 这种方法有一些限制,最明显的是,可以使用很少的符号,但可用于将数学表达式与图中的其他文本混合。
自定义字体
mathtext 还提供了一种对数学公式使用自定义字体的方法。 这种方法使用起来相当棘手,应该看做为有耐心的用户准备的试验特性。 通过将rcParam mathtext.fontset
设置为custom
,你可以设置以下参数,这些参数控制用于特定数学字符集的字体文件。
参数 | 相当于 |
---|---|
mathtext.it | \mathit{} 默认斜体 |
mathtext.rm | \mathrm{} 罗马字体(upright) |
mathtext.tt | \mathtt{} 打字机(monospace) |
mathtext.bf | \mathbf{} 粗体 |
mathtext.cal | \mathcal{} 书法 |
mathtext.sf | \mathsf{} sans-serif |
每个参数应该设置为fontconfig
字体描述符(在尚未编写的字体章节中定义)。
所使用的字体应该具有 Unicode 映射,以便找到任何非拉丁字符,例如希腊语。 如果要使用未包含在自定义字体中的数学符号,可以将rcParam mathtext.fallback_to_cm
设置为True
,这将导致自定义字体中找不到特定字符时,数学文本系统使用默认的 Computer Modern 字体中的字符。
请注意,Unicode 中规定的数学字形随时间而演进,许多字体的字形对于 mathtext 可能不在正确位置。
重音符号
重音命令可以位于任何符号之前,在其上添加重音。 他们中的一些些拥有较长和较短的形式。
命令 | 结果 |
---|---|
\acute a 或 \'a | ![]() |
\bar a | ![]() |
\breve a | ![]() |
\ddot a 或 \"a | ![]() |
\dot a 或 \.a | ![]() |
\grave a 或 \ a` | ![]() |
\hat a 或 \^a | ![]() |
\tilde a 或 \~a | ![]() |
\vec a | ![]() |
\overline{abc} | ![]() |
另外有两个特殊的重音符号,可以自动调整为符号的宽度:
命令 | 结果 |
---|---|
\widehat{xyz} | ![]() |
\widetilde{xyz} | ![]() |
当把重音放在小写的i
和j
上时应该小心。 注意下面的\imath
用来避免i
上额外的点:
r"$\hat i\ \ \hat \imath$"
符号
你也可以使用更大量的 TeX 符号,比如\infty
,\leftarrow
,\sum
,\int
。
小写希腊字母 | ||||
---|---|---|---|---|
![]() \alpha | ![]() \beta | ![]() \chi | ![]() \delta | ![]() \digamma |
![]() \epsilon | ![]() \eta | ![]() \gamma | ![]() \iota | ![]() \kappa |
![]() \lambda | ![]() \mu | ![]() \nu | ![]() \omega | ![]() \phi |
![]() \pi | ![]() \psi | ![]() \rho | ![]() \sigma | ![]() \tau |
![]() \theta | ![]() \upsilon | ![]() \varepsilon | ![]() \varkappa | ![]() \varphi |
![]() \varpi | ![]() \varrho | ![]() \varsigma | ![]() \vartheta | ![]() \xi |
![]() \zeta |
大写希腊字母 | |||||
---|---|---|---|---|---|
![]() \Delta | ![]() \Gamma | ![]() \Lambda | ![]() \Omega | ![]() \Phi | ![]() \Pi |
![]() \Psi | ![]() \Sigma | ![]() \Theta | ![]() \Upsilon | ![]() \Xi | ![]() \mho |
![]() \nabla |
希伯来文 | |||
---|---|---|---|
![]() \aleph | ![]() \beth | ![]() \daleth | ![]() \gimel |
分隔符 | |||||||
---|---|---|---|---|---|---|---|
![]() / | ![]() [ | ![]() \Downarrow | ![]() \Uparrow | ![]() \Vert | ![]() \backslash | ||
![]() \downarrow | ![]() \langle | ![]() \lceil | ![]() \lfloor | ![]() \llcorner | ![]() \lrcorner | ||
![]() \rangle | ![]() \rceil | ![]() \rfloor | ![]() \ulcorner | ![]() \uparrow | ![]() \urcorner | ||
![]() \vert | ![]() \{ | ![]() | ` | ![]() \} | ![]() ] | ![]() | ` |
大型符号 | ||||
---|---|---|---|---|
![]() \bigcap | ![]() \bigcup | ![]() \bigodot | ![]() \bigoplus | ![]() \bigotimes |
![]() \biguplus | ![]() \bigvee | ![]() \bigwedge | ![]() \coprod | ![]() \int |
![]() \oint | ![]() \prod | ![]() \sum |
标准函数名称 | |||
---|---|---|---|
![]() \Pr | ![]() \arccos | ![]() \arcsin | ![]() \arctan |
![]() \arg | ![]() \cos | ![]() \cosh | ![]() \cot |
![]() \coth | ![]() \csc | ![]() \deg | ![]() \det |
![]() \dim | ![]() \exp | ![]() \gcd | ![]() \hom |
![]() \inf | ![]() \ker | ![]() \lg | ![]() \lim |
![]() \liminf | ![]() \limsup | ![]() \ln | ![]() \log |
![]() \max | ![]() \min | ![]() \sec | ![]() \sin |
![]() \sinh | ![]() \sup | ![]() \tan | ![]() \tanh |
二元运算符和关系符号 | ||
---|---|---|
![]() \Bumpeq | ![]() \Cap | ![]() \Cup |
![]() \Doteq | ![]() \Join | ![]() \Subset |
![]() \Supset | ![]() \Vdash | ![]() \Vvdash |
![]() \approx | ![]() \approxeq | ![]() \ast |
![]() \asymp | ![]() \backepsilon | ![]() \backsim |
![]() \backsimeq | ![]() \barwedge | ![]() \because |
![]() \between | ![]() \bigcirc | ![]() \bigtriangledown |
![]() \bigtriangleup | ![]() \blacktriangleleft | ![]() \blacktriangleright |
![]() \bot | ![]() \bowtie | ![]() \boxdot |
![]() \boxminus | ![]() \boxplus | ![]() \boxtimes |
![]() \bullet | ![]() \bumpeq | ![]() \cap |
![]() \cdot | ![]() \circ | ![]() \circeq |
![]() \coloneq | ![]() \cong | ![]() \cup |
![]() \curlyeqprec | ![]() \curlyeqsucc | ![]() \curlyvee |
![]() \curlywedge | ![]() \dag | ![]() \dashv |
![]() \ddag | ![]() \diamond | ![]() \div |
![]() \divideontimes | ![]() \doteq | ![]() \doteqdot |
![]() \dotplus | ![]() \doublebarwedge | ![]() \eqcirc |
![]() \eqcolon | ![]() \eqsim | ![]() \eqslantgtr |
![]() \eqslantless | ![]() \equiv | ![]() \fallingdotseq |
![]() \frown | ![]() \geq | ![]() \geqq |
![]() \geqslant | ![]() \gg | ![]() \ggg |
![]() \gnapprox | ![]() \gneqq | ![]() \gnsim |
![]() \gtrapprox | ![]() \gtrdot | ![]() \gtreqless |
![]() \gtreqqless | ![]() \gtrless | ![]() \gtrsim |
![]() \in | ![]() \intercal | ![]() \leftthreetimes |
![]() \leq | ![]() \leqq | ![]() \leqslant |
![]() \lessapprox | ![]() \lessdot | ![]() \lesseqgtr |
![]() \lesseqqgtr | ![]() \lessgtr | ![]() \lesssim |
![]() \ll | ![]() \lll | ![]() \lnapprox |
![]() \lneqq | ![]() \lnsim | ![]() \ltimes |
![]() \mid | ![]() \models | ![]() \mp |
![]() \nVDash | ![]() \nVdash | ![]() \napprox |
![]() \ncong | ![]() \ne | ![]() \neq |
![]() \neq | ![]() \nequiv | ![]() \ngeq |
![]() \ngtr | ![]() \ni | ![]() \nleq |
![]() \nless | ![]() \nmid | ![]() \notin |
![]() \nparallel | ![]() \nprec | ![]() \nsim |
![]() \nsubset | ![]() \nsubseteq | ![]() \nsucc |
![]() \nsupset | ![]() \nsupseteq | ![]() \ntriangleleft |
![]() \ntrianglelefteq | ![]() \ntriangleright | ![]() \ntrianglerighteq |
![]() \nvDash | ![]() \nvdash | ![]() \odot |
![]() \ominus | ![]() \oplus | ![]() \oslash |
![]() \otimes | ![]() \parallel | ![]() \perp |
![]() \pitchfork | ![]() \pm | ![]() \prec |
![]() \precapprox | ![]() \preccurlyeq | ![]() \preceq |
![]() \precnapprox | ![]() \precnsim | ![]() \precsim |
![]() \propto | ![]() \rightthreetimes | ![]() \risingdotseq |
![]() \rtimes | ![]() \sim | ![]() \simeq |
![]() \slash | ![]() \smile | ![]() \sqcap |
![]() \sqcup | ![]() \sqsubset | ![]() \sqsubset |
![]() \sqsubseteq | ![]() \sqsupset | ![]() \sqsupset |
![]() \sqsupseteq | ![]() \star | ![]() \subset |
![]() \subseteq | ![]() \subseteqq | ![]() \subsetneq |
![]() \subsetneqq | ![]() \succ | ![]() \succapprox |
![]() \succcurlyeq | ![]() \succeq | ![]() \succnapprox |
![]() \succnsim | ![]() \succsim | ![]() \supset |
![]() \supseteq | ![]() \supseteqq | ![]() \supsetneq |
![]() \supsetneqq | ![]() \therefore | ![]() \times |
![]() \top | ![]() \triangleleft | ![]() \trianglelefteq |
![]() \triangleq | ![]() \triangleright | ![]() \trianglerighteq |
![]() \uplus | ![]() \vDash | ![]() \varpropto |
![]() \vartriangleleft | ![]() \vartriangleright | ![]() \vdash |
![]() \vee | ![]() \veebar | ![]() \wedge |
![]() \wr |
箭头符号 | ||
---|---|---|
![]() \Downarrow | ![]() \Leftarrow | |
![]() \Leftrightarrow | ![]() \Lleftarrow | |
![]() \Longleftarrow | ![]() \Longleftrightarrow | |
![]() \Longrightarrow | ![]() \Lsh | |
![]() \Nearrow | ![]() \Nwarrow | |
![]() \Rightarrow | ![]() \Rrightarrow | |
![]() \Rsh | ![]() \Searrow | |
![]() \Swarrow | ![]() \Uparrow | |
![]() \Updownarrow | ![]() \circlearrowleft | |
![]() \circlearrowright | ![]() \curvearrowleft | |
![]() \curvearrowright | ![]() \dashleftarrow | |
![]() \dashrightarrow | ![]() \downarrow | |
![]() \downdownarrows | ![]() \downharpoonleft | |
![]() \downharpoonright | ![]() \hookleftarrow | |
![]() \hookrightarrow | ![]() \leadsto | |
![]() \leftarrow | ![]() \leftarrowtail | |
![]() \leftharpoondown | ![]() \leftharpoonup | |
![]() \leftleftarrows | ![]() \leftrightarrow | |
![]() \leftrightarrows | ![]() \leftrightharpoons | |
![]() \leftrightsquigarrow | ![]() \leftsquigarrow | |
![]() \longleftarrow | ![]() \longleftrightarrow | |
![]() \longmapsto | ![]() \longrightarrow | |
![]() \looparrowleft | ![]() \looparrowright | |
![]() \mapsto | ![]() \multimap | |
![]() \nLeftarrow | ![]() \nLeftrightarrow | |
![]() \nRightarrow | ![]() \nearrow | |
![]() \nleftarrow | ![]() \nleftrightarrow | |
![]() \nrightarrow | ![]() \nwarrow | |
![]() \rightarrow | ![]() \rightarrowtail | |
![]() \rightharpoondown | ![]() \rightharpoonup | |
![]() \rightleftarrows | ![]() \rightleftarrows | |
![]() \rightleftharpoons | ![]() \rightleftharpoons | |
![]() \rightrightarrows | ![]() \rightrightarrows | |
![]() \rightsquigarrow | ![]() \searrow | |
![]() \swarrow | ![]() \to | |
![]() \twoheadleftarrow | ![]() \twoheadrightarrow | |
![]() \uparrow | ![]() \updownarrow | |
![]() \updownarrow | ![]() \upharpoonleft | |
![]() \upharpoonright | ![]() \upuparrows |
杂项符号 | ||
---|---|---|
![]() \$ | ![]() \AA | ![]() \Finv |
![]() \Game | ![]() \Im | ![]() \P |
![]() \Re | ![]() \S | ![]() \angle |
![]() \backprime | ![]() \bigstar | ![]() \blacksquare |
![]() \blacktriangle | ![]() \blacktriangledown | ![]() \cdots |
![]() \checkmark | ![]() \circledR | ![]() \circledS |
![]() \clubsuit | ![]() \complement | ![]() \copyright |
![]() \ddots | ![]() \diamondsuit | ![]() \ell |
![]() \emptyset | ![]() \eth | ![]() \exists |
![]() \flat | ![]() \forall | ![]() \hbar |
![]() \heartsuit | ![]() \hslash | ![]() \iiint |
![]() \iint | ![]() \iint | ![]() \imath |
![]() \infty | ![]() \jmath | ![]() \ldots |
![]() \measuredangle | ![]() \natural | ![]() \neg |
![]() \nexists | ![]() \oiiint | ![]() \partial |
![]() \prime | ![]() \sharp | ![]() \spadesuit |
![]() \sphericalangle | ![]() \ss | ![]() \triangledown |
![]() \varnothing | ![]() \vartriangle | ![]() \vdots |
![]() \wp | ![]() \yen |
如果特定符号没有名称(对于 STIX 字体中的许多较为模糊的符号也是如此),也可以使用 Unicode 字符:
ur'$\u23ce$'
示例
下面是个示例,在上下文中展示了许多这些特性。
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)
plt.plot(t,s)
plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
fontsize=20)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()