编写数学表达式#

Matplotlib 实现了一个轻量级的 TeX 表达式解析器和布局引擎,而 Mathtext 是该引擎支持的 TeX 标记子集。请注意,如果 rcParams["text.usetex"](默认值:False)为 *True*,Matplotlib 也可以直接使用 TeX 渲染所有文本;有关更多详细信息,请参阅 使用 LaTeX 渲染文本。如果 rcParams["text.usetex"](默认值: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 示例

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

注意

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

特殊字符#

Mathtext 必须放在一对(美国)美元符号 '$' 之间。包含 Mathtext 的字符串中,字面美元符号 '$' 必须使用反斜杠进行转义:'\$'。一个字符串可以包含多对美元符号,从而产生多个 Mathtext 表达式。美元符号数量为奇数的字符串仅渲染为纯文本。

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"](默认值: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"](默认值:'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 字体,与 Times 字体融合良好的 STIX 字体,或者您提供的 Unicode 字体。Mathtext 字体可以通过 rcParams["mathtext.fontset"](默认值:'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: Computer Modern (TeX)
stix: STIX (旨在与 Times 字体良好融合)
stixsans: STIX 无衬线字体

此外,您可以使用 \mathdefault{...} 或其别名 \mathregular{...} 来使用 Mathtext 之外的常规文本所用的字体。这种方法存在一些限制,最显著的是可用的符号会少得多,但它有助于使数学表达式与绘图中的其他文本良好融合。

为了与流行包兼容,\text{...} 可用并使用 \mathrm{...} 字体,但它会保留空格并将 - 渲染为破折号(而非减号)。

自定义字体#

Mathtext 还提供了一种为数学使用自定义字体的方法。这种方法使用起来相当棘手,应仅将其视为面向耐心用户的实验性功能。通过将 rcParams["mathtext.fontset"](默认值:'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"](默认值:'cm')设置为 'cm''stix''stixsans',这将导致 Mathtext 系统在自定义字体中找不到特定字符时使用备用字体中的字符。

请注意,Unicode 中指定的数学字形随着时间推移而演变,许多字体可能没有将字形放置在 Mathtext 所要求的正确位置。

重音符号#

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

命令

结果

\acute a or \'a

\bar a

\breve a

\dot a or \.a

\ddot a or \''a

\dddot a

\ddddot a

\grave a or \`a

\hat a or \^a

\tilde a or \~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

θ \theta

ϑ \vartheta

ι \iota

κ \kappa

ϰ \varkappa

λ \lambda

μ \mu

ν \nu

ξ \xi

π \pi

ϖ \varpi

ρ \rho

ϱ \varrho

σ \sigma

ς \varsigma

τ \tau

υ \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

] ]

{ \{

{ \leftbrace

{ \lbrace

} \rightbrace

} \}

} \rbrace

\|

\Vert

\uparrow

\downarrow

\updownarrow

\Uparrow

\Downarrow

\Updownarrow

\lceil

\rceil

\lfloor

\rfloor

\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 \arcsin

arctan \arctan

arg \arg

cos \cos

cosh \cosh

cot \cot

coth \coth

csc \csc

deg \deg

det \det

dim \dim

exp \exp

gcd \gcd

hom \hom

inf \inf

ker \ker

lg \lg

lim \lim

liminf \liminf

limsup \limsup

ln \ln

log \log

max \max

min \min

sec \sec

sin \sin

sinh \sinh

sup \sup

tan \tan

tanh \tanh

二元运算符

* *

+ +

- -

± \pm

× \times

÷ \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

\rightthreetimes

\curlyvee

\curlywedge

\Cap

\Cup

\doublebarwedge

\obar

\bigtriangleup

\triangleright

\rhd

\bigtriangledown

\lhd

\triangleleft

\bigcirc

\boxbar

⨿ \amalg

\merge

关系符号

: :

< <

= \equal

= =

> >

϶ \backepsilon

\dots

\in

\notin

\smallin

\ni

\notsmallowns

\smallowns

\propto

\varpropto

\rightangle

\mid

\nmid

\parallel

\nparallel

\therefore

\because

\ratio

\sim

\backsim

\nsim

\eqsim

\simeq

\nsimeq

\cong

\simneqq

\ncong

\approx

\napprox

\approxeq

\approxident

\backcong

\asymp

\Bumpeq

\bumpeq

\doteq

\doteqdot

\Doteq

\fallingdotseq

\risingdotseq

\coloneq

\eqcolon

\eqcirc

\circeq

\arceq

\wedgeq

\veeeq

\stareq

\triangleq

\triangleeq

\eqdef

\measeq

\questeq

\neq

\ne

\equiv

\nequiv

\Equiv

\leq

\geq

\leqq

\geqq

\lneqq

\gneqq

\ll

\gg

\between

\nless

\ngtr

\nleq

\ngeq

\lesssim

\gtrsim

\nlesssim

\ngtrsim

\lessgtr

\gtrless

\nlessgtr

\ngtrless

\prec

\succ

\preccurlyeq

\preceq

\succeq

\succcurlyeq

\precsim

\succsim

\nprec

\nsucc

\subset

\supset

\nsubset

\nsupset

\subseteq

\supseteq

\nsubseteq

\nsupseteq

\subsetneq

\supsetneq

\sqsubset

\sqsupset

\sqsubseteq

\sqsupseteq

\oequal

\vdash

\dashv

\top

\bot

\rightassert

\models

\vDash

\Vdash

\Vvdash

\rightModels

\nvdash

\nvDash

\nVdash

\nVDash

\scurel

\trianglelefteq

\trianglerighteq

\measuredrightangle

\varlrtriangle

\bowtie

\ltimes

\rtimes

\backsimeq

\Subset

\Supset

\pitchfork

\equalparallel

\lessdot

\gtrdot

\lll

\ggg

\lesseqgtr

\gtreqless

\eqless

\eqgtr

\curlyeqprec

\curlyeqsucc

\npreccurlyeq

\nsucccurlyeq

\nsqsubseteq

\nsqsupseteq

\sqsubsetneq

\sqsupsetneq

\lnsim

\gnsim

\precnsim

\succnsim

\ntriangleleft

\ntriangleright

\ntrianglelefteq

\ntrianglerighteq

\disin

\isins

\varisins

\isindot

\isinobar

\varisinobar

\isinvb

\isinE

\nisd

\nis

\varnis

\niobar

\varniobar

\bagmember

\frown

\smile

\triangle

\blacktriangleright

\triangleright

\vartriangleright

\blacktriangleleft

\triangleleft

\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

\rightarrow

\to

\downarrow

\leftrightarrow

\updownarrow

\nwarrow

\nearrow

\searrow

\swarrow

\nleftarrow

\nrightarrow

\leftsquigarrow

\rightsquigarrow

\twoheadleftarrow

\twoheaduparrow

\twoheadrightarrow

\twoheaddownarrow

\leftarrowtail

\rightarrowtail

\mapsfrom

\mapsup

\mapsto

\mapsdown

\updownarrowbar

\hookleftarrow

\hookrightarrow

\looparrowleft

\looparrowright

\leftrightsquigarrow

\nleftrightarrow

\downzigzagarrow

\Lsh

\Rsh

\Ldsh

\Rdsh

\curvearrowleft

\curvearrowright

\circlearrowleft

\circlearrowright

\cwopencirclearrow

\leftharpoonup

\leftharpoondown

\upharpoonright

\upharpoonleft

\rightharpoonup

\rightharpoondown

\downharpoonright

\downharpoonleft

\rightleftarrows

\updownarrows

\leftrightarrows

\leftleftarrows

\upuparrows

\rightrightarrows

\downdownarrows

\leftrightharpoons

\rightleftharpoons

\nLeftarrow

\nLeftrightarrow

\nRightarrow

\Leftarrow

\Uparrow

\Rightarrow

\Downarrow

\Leftrightarrow

\Updownarrow

\Nwarrow

\Nearrow

\Searrow

\Swarrow

\Lleftarrow

\Rrightarrow

\rightzigzagarrow

\leadsto

\barleftarrow

\rightarrowbar

\cupleftarrow

\multimap

\longleftarrow

\longrightarrow

\longleftrightarrow

\Longleftarrow

\Longrightarrow

\Longleftrightarrow

\longmapsto

\dashleftarrow

\dashrightarrow

点符号

\ldots

\therefore

\because

\Colon

\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

¬ \neg

® \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

\nexists

\emptyset

\varnothing

\increment

\nabla

\QED

\infty

\angle

\measuredangle

\sphericalangle

\ac

\sinewave

\hermitmatrix

\circledS

\blacksquare

\triangle

\vartriangle

\blacktriangle

\blacktriangledown

\triangledown

\bigstar

\danger

\spadesuit

\heartsuit

\diamondsuit

\clubsuit

\clubsuitopen

\flat

\natural

\sharp

\checkmark

\maltese

如果某个特定符号没有名称(STIX 字体中许多更不常见的符号就是这种情况),也可以使用 Unicode 字符

r'$\u23ce$'

由 Sphinx-Gallery 生成的画廊