编写数学表达式#

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 字体、STIX 字体(旨在与 Times 很好地融合),或者您提供的 Unicode 字体。可以通过 rcParams["mathtext.fontset"](默认值:'dejavusans')选择 Mathtext 字体。

所有字体可用的选项是

命令

结果

\mathrm{Roman}

\mathit{Italic}

\mathtt{Typewriter}

\mathcal{CALLIGRAPHY}

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

命令

结果

\mathbb{blackboard}

\mathrm{\mathbb{blackboard}}

\mathfrak{Fraktur}

\mathsf{sansserif}

\mathrm{\mathsf{sansserif}}

\mathbfit{bolditalic}

还有五个全局“字体集”可供选择,它们是使用 mathtext.fontset 参数在 matplotlibrc 中选择的。

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

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

{ \lbrace

{ \{

{ \leftbrace

} \}

} \rbrace

} \rightbrace

\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

反余弦 \arccos

反正弦 \arcsin

反正切 \arctan

幅角 \arg

余弦 \cos

双曲余弦 \cosh

余切 \cot

双曲余切 \coth

余割 \csc

\deg

行列式 \det

维数 \dim

指数 \exp

最大公约数 \gcd

同态 \hom

无穷大 \inf

\ker

以10为底的对数 \lg

极限 \lim

下极限 \liminf

上极限 \limsup

自然对数 \ln

对数 \log

最大值 \max

最小值 \min

正割 \sec

正弦 \sin

双曲正弦 \sinh

上确界 \sup

正切 \tan

双曲正切 \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

\rhd

\triangleright

\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

\Doteq

\doteqdot

\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

\preceq

\preccurlyeq

\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

\cwopencirclearrow

\circlearrowright

\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

\leadsto

\rightzigzagarrow

\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 生成的图库