书写数学表达式#

Matplotlib 实现了一个轻量级的 TeX 表达式解析器和布局引擎,Mathtext 是该引擎支持的 Tex 标记子集。请注意,如果 rcParams["text.usetex"] (default: False) 为 True,Matplotlib 也可以直接使用 TeX 渲染所有文本;详情请参阅 使用 LaTeX 进行文本渲染。如果 rcParams["text.usetex"] (default: False) 为 False,则支持 Mathtext。

任何字符串都可以通过将其放在一对美元符号 '$' 中来作为 Mathtext 处理。Mathtext 通常包含许多反斜杠 '\';因此,为了使反斜杠不需要转义,Mathtext 通常使用原始字符串编写。例如:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(3, 3), linewidth=1, edgecolor='black')
fig.text(.2, .7, "plain text: alpha > beta")
fig.text(.2, .5, "Mathtext: $\\alpha > \\beta$")
fig.text(.2, .3, r"raw string Mathtext: $\alpha > \beta$")
mathtext

使用 Mathtext 不需要安装 TeX,因为 Matplotlib 自带 Mathtext 解析器和引擎。Mathtext 布局引擎是对 Donald Knuth 的 TeX 布局算法的直接改编。要使用不同的 TeX 引擎渲染数学文本,请参阅 使用 LaTeX 进行文本渲染

备注

要在文档中生成与 mathtext 生成的输出完全匹配的 html 输出,请使用 matplotlib.sphinxext.mathmpl Sphinx 扩展。

特殊字符#

数学文本必须放置在一对美元符号 '$' 之间。字符串中的文字美元符号 '$' 必须使用反斜杠进行转义:'\$'。一个字符串可以包含多对美元符号,从而形成多个数学文本表达式。包含奇数个美元符号的字符串将仅作为纯文本呈现。

fig = plt.figure(figsize=(3, 3), linewidth=1, edgecolor='black')
fig.suptitle("Number of unescaped $")
fig.text(.1, .7, r"odd: $ \alpha $ = $1")
fig.text(.1, .5, r"even: $ \beta $= $ 2 $")
fig.text(.1, .3, r'odd: $ \gamma $= \$3 $')
fig.text(.1, .1, r'even: $ \delta $ = $ \$4 $')
Number of unescaped $

虽然 Mathtext 旨在与常规 TeX 兼容,但在需要转义特殊字符的情况下有所不同。在 TeX 中,美元符号在非数学文本中必须转义为 '\$',而在 Matplotlib 中,在编写 Mathtext 时必须转义美元符号。

这些其他特殊字符在非数学的 TeX 中也会被转义,而在 Matplotlib 中,它们的行为取决于 rcParams["text.usetex"] (default: False) 的设置:

# $ % & ~ _ ^ \ { } \( \) \[ \]

更多信息请参见 usetex 教程

下标和上标#

要创建下标和上标,请使用 '_''^' 符号:

r'$\alpha_i > \beta_i$'
\[\alpha_i > \beta_i\]

要正确显示多字母的下标或上标,应将它们放在花括号 {...} 中:

r'$\alpha^{ic} > \beta_{ic}$'
\[\alpha^{ic} > \beta_{ic}\]

一些符号会自动将其上下标置于操作符的上方和下方。例如,要写出从 的和,你可以这样做:

r'$\sum_{i=0}^\infty x_i$'
\[\sum_{i=0}^\infty x_i\]

分数、二项式和堆叠数字#

分数、二项式和堆叠数字可以通过 \frac{}{}, \binom{}{}\genfrac{}{}{}{}{}{} 命令分别创建:

r'$\frac{3}{4} \binom{3}{4} \genfrac{}{}{0}{}{3}{4}$'

生成

\[\frac{3}{4} \binom{3}{4} \genfrac{}{}{0pt}{}{3}{4}\]

分数可以任意嵌套:

r'$\frac{5 - \frac{1}{x}}{4}$'

生成

\[\frac{5 - \frac{1}{x}}{4}\]

需要注意的是,在分数周围放置括号和方括号时需要特别小心。用显而易见的方式做会产生太小的方括号:

r'$(\frac{5 - \frac{1}{x}}{4})$'
\[(\frac{5 - \frac{1}{x}}{4})\]

解决方案是在括号前加上 \left\right,以告知解析器这些括号包含整个对象。:

r'$\left(\frac{5 - \frac{1}{x}}{4}\right)$'
\[\left(\frac{5 - \frac{1}{x}}{4}\right)\]

部首#

根号可以使用 \sqrt[]{} 命令生成。例如:

r'$\sqrt{2}$'
\[\sqrt{2}\]

任何基数都可以(可选地)在方括号内提供。请注意,基数必须是一个简单的表达式,不能包含分数或上下标等布局命令:

r'$\sqrt[3]{x}$'
\[\sqrt[3]{x}\]

字体#

默认字体为数学符号的*斜体*。

可以使用 rcParams["mathtext.default"] (default: 'it') 更改此默认设置。有关设置 rcParams 的信息,请参阅 使用样式表和rcParams自定义Matplotlib。例如,将默认设置为 regular 允许您对数学文本和常规非数学文本使用相同的字体。

要更改字体,例如将“sin”写成罗马字体,请将文本包含在字体命令中:

r'$s(t) = \mathcal{A}\mathrm{sin}(2 \omega t)$'
\[s(t) = \mathcal{A}\mathrm{sin}(2 \omega t)\]

更方便的是,许多常用函数名在罗马字体中排版时都有快捷方式。因此,上述表达式可以写成如下:

r'$s(t) = \mathcal{A}\sin(2 \omega t)$'
\[s(t) = \mathcal{A}\sin(2 \omega t)\]

这里,“s”和“t”是斜体字体(默认)的变量,“sin”是罗马字体,而振幅“A”是书法字体。注意在上面的例子中,书法字体的 A 被压缩进了 sin 中。你可以使用间距命令在它们之间添加一些空白:

r's(t) = \mathcal{A}\/\sin(2 \omega t)'
\[s(t) = \mathcal{A}\, \sin(2 \omega t)\]

Mathtext 可以使用 DejaVu Sans(默认)、DejaVu Serif、(La)TeX 中的 Computer Modern 字体、STIX 字体(这些字体设计用于与 Times 字体很好地融合),或者您提供的 Unicode 字体。Mathtext 字体可以通过 rcParams["mathtext.fontset"] (default: 'dejavusans') 进行选择。

所有字体可用的选项包括:

命令

结果

\mathrm{Roman}

\mathit{Italic}

\mathtt{Typewriter}

\mathcal{CALLIGRAPHY}

在使用 STIX 字体时,您还可以选择:

命令

结果

\mathbb{blackboard}

\mathrm{\mathbb{blackboard}}

\mathfrak{Fraktur}

\mathsf{sansserif}

\mathrm{\mathsf{sansserif}}

\mathbfit{bolditalic}

还有五种全局“字体集”可供选择,这些字体集通过 matplotlibrc 中的 mathtext.fontset 参数进行选择。

dejavusans: DejaVu Sans
dejavuserif: DejaVu Serif
cm: 计算机现代 (TeX)
stix: STIX (设计与Times字体融合良好)
stixsans: STIX 无衬线字体

此外,你可以使用 \mathdefault{...} 或其别名 \mathregular{...} 来使用 Mathtext 之外用于常规文本的字体。这种方法有许多限制,最明显的是可用的符号要少得多,但它对于使数学表达式与图中的其他文本很好地融合非常有用。

为了与流行的包兼容,\text{...} 是可用的,并使用 \mathrm{...} 字体,但保留空格并以破折号(不是减号)呈现 -。

自定义字体#

Mathtext 还提供了一种使用自定义字体进行数学表达的方法。这种方法使用起来相当棘手,应仅被视为有耐心的用户的实验性功能。通过将 rcParams["mathtext.fontset"] (default: 'dejavusans') 设置为 custom,您可以设置以下参数,这些参数控制使用哪个字体文件来表示特定的数学字符集。

参数

对应于

mathtext.it

\mathit{} 或默认斜体

mathtext.rm

\mathrm{} 罗马体(直立)

mathtext.tt

\mathtt{} 打字机字体(等宽字体)

mathtext.bf

\mathbf{} 粗体

mathtext.bfit

\mathbfit{} 粗斜体

mathtext.cal

\mathcal{} 花体

mathtext.sf

\mathsf{} 无衬线字体

每个参数应设置为一个 fontconfig 字体描述符,如 Matplotlib 中的字体 中所定义。使用的字体应具有 Unicode 映射,以便查找任何非拉丁字符,例如希腊字母。如果你想使用一个不在自定义字体中的数学符号,你可以将 rcParams["mathtext.fallback"] (default: 'cm') 设置为 'cm''stix''stixsans',这将导致 Mathtext 系统在自定义字体中找不到特定字符时使用替代字体中的字符。

请注意,Unicode 中指定的数学字形随着时间的推移已经发生了变化,许多字体可能没有正确位置的字形供 Mathtext 使用。

重音#

一个重音命令可以在任何符号前加上,以在该符号上方添加重音。其中一些有长形式和短形式。

命令

结果

\acute a\'a

\bar a

\breve a

\dot a\.a

\ddot a\''a

\dddot a

\ddddot 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$"
\[\hat i\ \ \hat \imath\]

符号#

你也可以使用大量的TeX符号,例如 \infty\leftarrow\sum\int

小写希腊字母

α \alpha

β \beta

γ \gamma

δ \delta

ε \epsilon

ε \varepsilon

ζ \zeta

η \eta

θ `` heta``

ϑ \vartheta

ι \iota

κ \kappa

ϰ \varkappa

λ \lambda

μ \mu

ν `` u``

ξ \xi

π \pi

ϖ \varpi

ρ `` ho``

ϱ \varrho

σ \sigma

ς \varsigma

τ `` au``

υ \upsilon

χ \chi

ψ \psi

ω \omega

ϕ \phi

φ \varphi

ϝ \digamma

大写希腊字母

Γ \Gamma

Δ \Delta

Θ \Theta

Λ \Lambda

Ξ \Xi

Π \Pi

Σ \Sigma

Υ \Upsilon

Φ \Phi

Ψ \Psi

Ω \Omega

希伯来语

\daleth

\gimel

\beth

\aleph

拉丁命名字符

Å \AA

Æ \AE

Ð \DH

Ø \O

Þ \Thorn

ß \ss

å \aa

æ \ae

ð \eth

ð \dh

ø \o

\thorn

Œ \OE

œ \oe

分隔符

\leftparen

\rightparen

)

/ /

< <

>

[ ``[

[ \lbrack

\ ``\backslash

| \vert

| |

]

\rbrack

{ \lbrace

\leftbrace

{ \{

} `` ightbrace``

} \}

} `` brace``

\|

\Vert

\uparrow

\downarrow

\updownarrow

\Uparrow

\Downarrow

\Updownarrow

\lceil

⌉ `` ceil``

\lfloor

⌋ `` floor``

\langle

\rangle

\lgroup

\rgroup

大符号

\prod

\coprod

\sum

\int

\iint

\iiint

\oint

\oiint

\oiiint

\bigwedge

\bigvee

\bigcap

\bigcup

\bigodot

\bigoplus

\bigotimes

\biguplus

\bigsqcup

\iiiint

标准函数名称

Pr \Pr

arccos \arccos

反正弦 \arcsin

反正切 \arctan

参数 \arg

余弦 \cos

双曲余弦 \cosh

余切 \cot

coth \coth

csc \csc

\deg

det \det

维度 \dim

指数 \exp

最大公约数 \gcd

同态 \hom

inf \inf

\ker

lg \lg

极限 \lim

下极限 \liminf

上极限 \limsup

ln \ln

日志 \log

最大值 \max

最小值 \min

\sec

正弦 \sin

双曲正弦 \sinh

上确界 \sup

tan `` an``

双曲正切 `` anh``

二元操作符号

*

+

-

± \pm

× `` imes``

\div

\dagger

\ddagger

\mp

\dotplus

\slash

\setminus

\ast

\circ

\bullet

\wedge

\vee

\cap

\cup

\dotminus

\minuscolon

\dotsminusdots

\wr

\cupdot

\uplus

\sqcap

\sqcup

\oplus

\ominus

\otimes

\oslash

\odot

\circledcirc

\circledast

\circleddash

\boxplus

\boxminus

\boxtimes

\boxdot

\unlhd

\unrhd

\intercal

\veebar

\barwedge

\barvee

\diamond

\cdot

\star

\divideontimes

\leftthreetimes

⋌ `` ightthreetimes``

\curlyvee

\curlywedge

\Cap

\Cup

\doublebarwedge

\obar

\bigtriangleup

▷ `` hd``

▷ `` riangleright``

\bigtriangledown

\lhd

◁ `` riangleleft``

\bigcirc

\boxbar

⨿ \amalg

\merge

关系符号

:

< <

= \equal

= =

>

϶ \backepsilon

\dots

\in

∉ `` otin``

\smallin

∋ `` i``

∌ `` otsmallowns``

\smallowns

\propto

\varpropto

∟ `` ightangle``

\mid

∤ `` mid``

\parallel

∦ `` parallel``

∴ `` herefore``

\because

比例

\sim

\backsim

≁ `` sim``

\eqsim

\simeq

≄ `` simeq``

\cong

\simneqq

≇ `` cong``

\approx

≉ `` approx``

\approxeq

\approxident

\backcong

\asymp

\Bumpeq

\bumpeq

\doteq

\Doteq

\doteqdot

\fallingdotseq

≓ `` isingdotseq``

\coloneq

\eqcolon

\eqcirc

\circeq

\arceq

\wedgeq

\veeeq

\stareq

≜ `` riangleeq``

≜ `` riangleq``

\eqdef

\measeq

\questeq

≠ `` eq``

≠ `` e``

\equiv

≢ `` equiv``

\Equiv

\leq

\geq

\leqq

\geqq

\lneqq

\gneqq

\ll

\gg

\between

≮ `` less``

≯ `` gtr``

≰ `` leq``

≱ `` geq``

\lesssim

\gtrsim

≴ `` lesssim``

≵ `` gtrsim``

\lessgtr

\gtrless

≸ `` lessgtr``

\ngtrless

\prec

\succ

\preccurlyeq

\preceq

\succeq

\succcurlyeq

\precsim

\succsim

⊀ `` prec``

\nsucc

\subset

\supset

⊄ `` subset``

⊅ `` supset``

\subseteq

\supseteq

⊈ `` subseteq``

⊉ `` supseteq``

\subsetneq

\supsetneq

\sqsubset

\sqsupset

\sqsubseteq

\sqsupseteq

\oequal

\vdash

\dashv

⊤ `` op``

\bot

⊦ `` ightassert``

\models

\vDash

\Vdash

\Vvdash

⊫ `` ightModels``

⊬ `` vdash``

⊭ `` vDash``

⊮ `` Vdash``

⊯ `` VDash``

\scurel

⊴ `` rianglelefteq``

⊵ `` rianglerighteq``

\measuredrightangle

\varlrtriangle

\bowtie

\ltimes

\backsimeq

\Subset

\Supset

\pitchfork

\equalparallel

\lessdot

\gtrdot

⋘ “lll”

\ggg

\lesseqgtr

\gtreqless

\eqless

\eqgtr

\curlyeqprec

\curlyeqsucc

⋠ `` preccurlyeq``

⋡ `` succcurlyeq``

⋢ `` sqsubseteq``

⋣ `` sqsupseteq``

\sqsubsetneq

\sqsupsetneq

\lnsim

\gnsim

\precnsim

\succnsim

⋪ `` triangleleft``

⋫ `` triangleright``

⋬ `` trianglelefteq``

⋭ `` trianglerighteq``

\disin

\isins

\varisins

\isindot

\isinobar

\varisinobar

\isinvb

\isinE

⋺ `` isd``

⋼ `` is``

\varnis

⋾ `` iobar``

\varniobar

\bagmember

\frown

\smile

△ `` riangle``

\blacktriangleright

▷ `` riangleright``

\vartriangleright

\blacktriangleleft

◁ `` riangleleft``

\vartriangleleft

\perp

\Join

\leqslant

\geqslant

\lessapprox

\gtrapprox

\lnapprox

\gnapprox

\lesseqqgtr

\gtreqqless

\eqslantless

\eqslantgtr

\precapprox

\succapprox

\precnapprox

\succnapprox

\subseteqq

\supseteqq

\subsetneqq

\supsetneqq

箭头符号

\overleftarrow

\overleftrightarrow

\leftarrow

\uparrow

→ `` o``

→ `` ightarrow``

\downarrow

\leftrightarrow

\updownarrow

↖ `` warrow``

↗ `` earrow``

\searrow

\swarrow

↚ `` leftarrow``

↛ `` rightarrow``

\leftsquigarrow

↝ `` ightsquigarrow``

↞ `` woheadleftarrow``

↟ `` woheaduparrow``

↠ `` woheadrightarrow``

↡ `` woheaddownarrow``

\leftarrowtail

↣ `` ightarrowtail``

\mapsfrom

\mapsup

\mapsto

\mapsdown

\updownarrowbar

\hookleftarrow

\hookrightarrow

\looparrowleft

\looparrowright

\leftrightsquigarrow

↮ `` leftrightarrow``

\downzigzagarrow

\Lsh

\Rsh

\Ldsh

\Rdsh

\curvearrowleft

\curvearrowright

\circlearrowleft

\cwopencirclearrow

\circlearrowright

\leftharpoonup

\leftharpoondown

\upharpoonright

\upharpoonleft

⇀ `` ightharpoonup``

\rightharpoondown

\downharpoonright

\downharpoonleft

⇄ `` ightleftarrows``

\updownarrows

\leftrightarrows

\leftleftarrows

\upuparrows

⇉ `` ightrightarrows``

\downdownarrows

\leftrightharpoons

⇌ `` ightleftharpoons``

\nLeftarrow

⇎ `` Leftrightarrow``

⇏ `` Rightarrow``

\Leftarrow

\Uparrow

\Rightarrow

\Downarrow

\Leftrightarrow

\Updownarrow

\Nwarrow

\Nearrow

\Searrow

\Swarrow

\Lleftarrow

\Rrightarrow

\leadsto

\rightzigzagarrow

\barleftarrow

\rightarrowbar

\cupleftarrow

\multimap

\longleftarrow

\longrightarrow

\longleftrightarrow

\Longleftarrow

\Longrightarrow

\Longleftrightarrow

\longmapsto

\dashleftarrow

\dashrightarrow

点符号

\ldots

∴ `` herefore``

\because

\冒号

\vdots

\cdots

\adots

\ddots

黑板字符

\BbbC

\BbbN

\BbbP

\BbbQ

\BbbR

\BbbZ

脚本角色

\scrg

\scrH

\scrI

\scrL

\scrR

\scrB

\scre

\scrE

\scrF

\scrM

\scro

Fraktur 字符

\frakZ

\frakC

杂项符号

$ \$

¢ \cent

£ \sterling

¥ \yen

§ \S

© \copyright

¬ `` eg``

® \circledR

° \degree

\P

ħ \hbar

ı \imath

ı \i

Ł \L

ł \l

ƛ \lambdabar

ȷ \jmath

\dag

\ddag

\perthousand

\prime

\backprime

\hslash

\Im

\ell

\wp

\Re

\mho

\Finv

\Game

\forall

\complement

\partial

\exists

∄ `` exists``

\emptyset

\varnothing

\increment

∇ `` abla``

\QED

\infty

\angle

\measuredangle

\sphericalangle

\ac

\sinewave

\hermitmatrix

\circledS

\blacksquare

△ `` riangle``

\vartriangle

\blacktriangle

\blacktriangledown

▿ `` riangledown``

\bigstar

\danger

\spadesuit

\heartsuit

\diamondsuit

\clubsuit

\clubsuitopen

\flat

♮ `` atural``

\sharp

\checkmark

\maltese

如果某个特定符号没有名称(如STIX字体中的许多更晦涩符号),也可以使用Unicode字符:

r'$\u23ce$'

由 Sphinx-Gallery 生成的图库