数学符号#
Bokeh 支持在 LaTeX 和 MathML 标记语言中表达的数学符号,并且正在增加越来越多的元素。目前,您可以使用 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
要在 RangeSlider 或 Slider 小部件的标题中使用 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_size
和 text_color
来更改 MathML 符号的字体大小和颜色。例如
plot.xaxis.axis_label = MathML(text=mathml)
plot.xaxis.axis_label_text_color = "green"
plot.xaxis.axis_label_text_font_size = "50px"