数学符号#

Bokeh 支持在 LaTeXMathML 标记语言中表达的数学符号,并且正在增加越来越多的元素。目前,您可以使用 LaTeX 和 MathML 符号以下列元素:

Bokeh 使用 MathJax 库来处理 LaTeX 和 MathML。有关 MathJax 的更多信息,请参阅官方 MathJax 文档

注意

如果您使用 components() 函数,请确保在您的 HTML 模板中包含 bokeh-mathjax- 资源。

LaTeX#

要使用 LaTeX 符号,您可以直接将字符串传递给任何支持的元素。此字符串需要以 MathJax 的默认分隔符 开头和结尾。这些分隔符是 $$...$$, \[...\], 和 \(...\)。例如:r"$$\sin(x)$$"

轴标签、标题和标签上的 LaTeX

要将 LaTeX 符号用作 轴标签标题标签,请传递以 MathJax 的默认分隔符 开头和结尾,并包含 LaTeX 符号的原始字符串文字。例如

from numpy import arange, pi, sin

from bokeh.models.annotations.labels import Label
from bokeh.plotting import figure, show

x = arange(-2*pi, 2*pi, 0.1)
y = sin(x)

p = figure(height=250, title=r"$$\sin(x)$$ for \[x\] between \(-2\pi\) and $$2\pi$$")
p.scatter(x, y, alpha=0.6, size=7)

label = Label(
    text=r"$$y = \sin(x)$$",
    x=150, y=130,
    x_units="screen", y_units="screen",
)
p.add_layout(label)

p.yaxis.axis_label = r"\(\sin(x)\)"
p.xaxis.axis_label = r"\[x\pi\]"

show(p)
LaTeX 和刻度标签

要向刻度标签添加 LaTeX 符号,请使用 major_label_overrides() 函数与轴一起使用。

此函数用于将现有刻度标签的值替换为自定义文本。它接受一个字典,其中刻度标签的原始值为键,您的自定义值为字典的值。

使用此函数将任何普通文本刻度标签替换为 LaTeX 符号

from numpy import arange

from bokeh.plotting import figure, show

x = arange(1, 4.5, 0.25)
y = 1 / x

plot = figure(height=200)
plot.title = "Current over Resistance at a static voltage of 1 volt"
plot.scatter(x, y, fill_color="blue", size=5)
plot.line(x, y, color="darkgrey")

plot.xaxis.axis_label = "Resistance"
plot.xaxis.ticker = [1, 2, 3, 4]
plot.xaxis.major_label_overrides = {
    1: r"1 $$\Omega$$",
    2: r"2 $$\Omega$$",
    3: r"3 $$\Omega$$",
    4: r"4 $$\Omega$$",
}

plot.yaxis.axis_label = "Current"
plot.yaxis.ticker = [0.2, 0.4, 0.6, 0.8, 1.0]
plot.yaxis.major_label_overrides = {
    0.2: "0.2 $$A$$",
    0.4: "0.4 $$A$$",
    0.6: "0.6 $$A$$",
    0.8: "0.8 $$A$$",
    1: "1 $$A$$",
}
show(plot)
RangeSlider 和 Slider 小部件标题上的 LaTeX

要在 RangeSliderSlider 小部件的标题中使用 LaTeX 符号,请将以 MathJax 的默认分隔符 开头和结尾,并包含 LaTeX 符号的原始字符串文字作为 title 参数。例如

from bokeh.io import show
from bokeh.models import Slider

slider = Slider(start=0, end=10, value=1, step=.1, title=r"$$\delta \text{ (damping factor, 1/s)}$$")

show(slider)
LaTeX 与 div 和段落小部件

要在 div 小部件段落 小部件 的文本中包含 LaTeX 符号,请在您的字符串中使用标准的 MathJax 的默认分隔符

from bokeh.io import show
from bokeh.models import Div

div = Div(
    width=400, height=100, background="#fafafa",
    text=r"The Pythagorean identity is $$\sin^2(x) + \cos^2(x) = 1$$",
)

show(div)

要禁用 div 或段落小部件的 LaTeX 渲染,请将小部件的 disable_math 属性设置为 True。

您可以使用 Bokeh 的一些标准 文本属性 来更改渲染的数学文本的外观。使用 text_font_size 更改字体大小,使用 text_color 更改颜色。例如

p.xaxis.axis_label = r"$$\nu \:(10^{15} s^{-1})$$"
p.xaxis.axis_label_text_color = "green"
p.xaxis.axis_label_text_font_size = "50px"

Bokeh 主题 中定义的文本颜色和大小也适用。

此外,您可以使用 MathJax 中包含的 LaTeX 扩展。例如,使用 \text{} 将文字与数学表达式结合起来。或者使用 颜色扩展 更改渲染的 LaTeX 符号的颜色:\color{white} \sin(x)。使用 LaTeX 扩展设置的文本属性会覆盖在代码或主题中设置的其他任何文本属性。

注意

MathJax 支持 LaTeX 数学的限制性。有关详细信息,请参阅 MathJax 文档中的 与实际 TeX 的差异

MathML#

要添加以 MathML 编写的数学符号,请直接使用 Bokeh 的 MathML 模型。此模型具有一个 text 属性,它接受包含 MathML 的字符串。例如

from numpy import arange

from bokeh.models import MathML
from bokeh.plotting import figure, show

x = arange(-10, 10, 0.1)
y = (x * 0.5) ** 2

mathml = """
<math>
  <mrow>
    <mfrac>
      <mn>1</mn>
      <mn>4</mn>
    </mfrac>
    <msup>
      <mi>x</mi>
      <mn>2</mn>
    </msup>
  </mrow>
</math>
"""

plot = figure(height=200)
plot.line(x, y)

plot.xaxis.axis_label = MathML(text=mathml)

show(plot)

与 LaTeX 类似,您也可以使用 Bokeh 的标准 文本属性 text_font_sizetext_color 来更改 MathML 符号的字体大小和颜色。例如

plot.xaxis.axis_label = MathML(text=mathml)
plot.xaxis.axis_label_text_color = "green"
plot.xaxis.axis_label_text_font_size = "50px"

有关更多信息,请参阅 MathML参考指南