在Google Colab的ipywidget下拉菜单中使用LaTeX显示希腊符号失败求助
解决ipywidgets下拉菜单中LaTeX符号不渲染的问题
在ipywidgets下拉菜单中尝试用LaTeX显示θ等希腊符号时无法正常渲染,此前在matplotlib绘图中使用r'$\LaTeX$'语法可以正常编译符号,但下拉菜单中无效。原代码如下:
import ipywidgets as widgets import numpy as np import matplotlib.pyplot as plt def cardioide_widget(a=4,cardioide=1): fig = plt.figure(figsize=(5,5)) axp = plt.subplot(111, projection="polar") # 定义绘图变量 def c(cardioide,theta): if cardioide == 1: return a+a*np.cos(theta) elif cardioide == 2: return a-a*np.cos(theta) elif cardioide == 3: return a+a*np.sin(theta) elif cardioide == 4: return a-a*np.sin(theta) theta = np.linspace(0, 2*np.pi, 200) # 极坐标绘图 axp.plot(theta,c(cardioide,theta)) # 设置极坐标轴范围 axp.set_rmax(10.05) plt.show() widgets.interact(cardioide_widget, a=(0.5,5.0,0.1),cardioide=[(r'$r = a + a cos(\theta)$',1),('r = a - a cos(theta)',2),('r = a + a sen(theta)',3),('r = a - a sen(theta)',4)]);
解决方法
ipywidgets的默认下拉菜单不会自动解析LaTeX字符串,需要使用widgets.Latex对象作为选项的标签,让Jupyter的MathJax渲染LaTeX公式。修改后的代码如下:
import ipywidgets as widgets import numpy as np import matplotlib.pyplot as plt def cardioide_widget(a=4,cardioide=1): fig = plt.figure(figsize=(5,5)) axp = plt.subplot(111, projection="polar") # 定义绘图变量 def c(cardioide,theta): if cardioide == 1: return a+a*np.cos(theta) elif cardioide == 2: return a-a*np.cos(theta) elif cardioide == 3: return a+a*np.sin(theta) elif cardioide == 4: return a-a*np.sin(theta) theta = np.linspace(0, 2*np.pi, 200) # 极坐标绘图 axp.plot(theta,c(cardioide,theta)) # 设置极坐标轴范围 axp.set_rmax(10.05) plt.show() # 用Latex对象作为下拉选项的标签 cardioide_options = [ (widgets.Latex(r'$r = a + a\cos(\theta)$'), 1), (widgets.Latex(r'$r = a - a\cos(\theta)$'), 2), (widgets.Latex(r'$r = a + a\sin(\theta)$'), 3), (widgets.Latex(r'$r = a - a\sin(\theta)$'), 4) ] widgets.interact(cardioide_widget, a=(0.5,5.0,0.1), cardioide=cardioide_options);
说明
- 将下拉菜单的选项标签替换为
widgets.Latex实例,传入LaTeX格式的字符串(注意用\cos、\sin代替普通的cos、sin,以获得正确的数学符号渲染) - Jupyter环境默认加载MathJax,因此
widgets.Latex可以自动解析并渲染LaTeX公式,包括希腊字母θ
内容的提问来源于stack exchange,提问作者Andrés López
相关产品推荐
相关产品推荐

