Multi-line matplotlib 中带有变量的标题

Multi-line title with variable in matplotlib

我使用的是 Matplotlib 3.1.2,我正在尝试将标题分成两行。我在 plt.title() 中有一个带有乳胶格式 (r'') 的可变字符串。当我在字符串中尝试 \newline\n 时,输出只是将 \newline 或 \n 打印为文本,并且没有行拆分。这是我的实现:

  plt.title(r'M$_{\rm{BH}}$ = 10$^{10}$ M$_{\odot}$, log U = %s, r$_{\rm{in}}$ = 10$^{18}$ cm'%(-1 + ((array1.tolist().index(i))*0.25)))

我尝试添加一个 plt.suptitle() 来完成这项工作,但两条线之间有重叠,我不知道如何在它们之间添加 spacing/padding。

一种可能的解决方案是不使用原始字符串,但您需要转义 \:

plt.title('M$_{\rm{BH}}$ = 10$^{10}$ M$_{\odot}$\nlog U = %s\nr$_{\rm{in}}$ = 10$^{18}$ cm'%('test'))

我一直在寻找解决这个问题的方法,并且它甚至可以使用 LaTeX 的原始字符串使用:

import matplotlib.pyplot as plt
plt.title(r"Text $\omega$" + '\n' + r"$\delta$", multialignment='center')

或者,使用 3D 图:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_title(r"Text $\omega$" + '\n' + r"$\delta$", multialignment='center')

可能需要也可能不需要使用实际的文本 LaTeX 渲染来代替 Matplotlib 的 built-in MathTex。您可以通过以下方式做到这一点:

import matplotlib.pyplot as plt
plt.rcParams.update({"text.usetex" : True})

另外,我认为它看起来更漂亮。