Matplotlib绘制多子图色标图时第二个子图标题LaTeX渲染触发KeyError问题
Matplotlib绘制多子图色标图时第二个子图标题LaTeX渲染触发KeyError问题
嘿,这个坑我之前踩过!咱们来拆解下问题出在哪:
你第二个子图的标题里,LaTeX公式$\sqrt{U_c^2 + V_c^2}$用到了大括号{},但同时你又用了Python的.format(l)来插入时间变量l。Python的字符串格式化机制会把所有{}都识别成需要替换的占位符,它根本分不清这是LaTeX的语法还是自己的格式化标记,所以就去寻找名为'U_c^2 + V_c^2'的键,找不到自然就抛出KeyError了。而第一个标题$\zeta_T$里没有大括号,所以完全没问题。
给你两种简单的解决办法:
方法一:转义大括号(适用.format()写法)
把LaTeX里的每个{}换成{{}},这样Python会将其解析为单个{}传递给LaTeX渲染:
axs[1].set_title(r'$\sqrt{{U_c^2 + V_c^2}}$ at t={}'.format(l))
方法二:改用f-string(Python 3.6+适用)
f-string用起来更直观,同样需要把LaTeX里的{}转义成{{}}:
axs[1].set_title(rf'$\sqrt{{U_c^2 + V_c^2}}$ at t={l}')
这里的rf表示原始f-string,能避免LaTeX里的反斜杠被Python误解析。
这样修改后,Python就不会把LaTeX公式里的大括号当成格式化占位符,LaTeX也能正常渲染出你想要的公式啦。
备注:内容来源于stack exchange,提问作者Pustam Raut
相关产品推荐
相关产品推荐

