在Python中使用TeX将换行符放入matplotlib标签中?


71

如何在matplotlib中向图的标签(例如xlabel或ylabel)添加换行符?例如,

plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here") 

理想情况下,我也希望y标签也居中。有没有办法做到这一点?标签必须具有TeX(用“ $”括起来)和换行符,这一点很重要。

Answers:


43

您的示例就是使用它的方式\n。您需要删除r前缀,但python不会将其视为原始字符串


8
您可能需要主动对LaTeX命令进行两次转义,以确保它们不会被Python解释:xlabel('$\\Sigma$')
Benjamin Bannier 2010年

8
这个答案是不正确的。您可以使用普通字符串(no r)将胶乳``两次转义,或者遵循@EOLs的答案
aaren 2013年

2
关于居中的信息:ylabel('this is vertical\ntest', multialignment='center')来自matplotlib.org/examples/pylab_examples/multiline.html
Faber

2
遗憾的是没有一个提出的解决方案的工作与选项 rcParams["text.usetex"] = True
塞缪尔

103

您可以两全其美:LaTeX命令换行符的自动“转义” :

plt.ylabel(r"My long label with unescaped {\LaTeX} $\Sigma_{C}$ math"
           "\n"  # Newline: the backslash is interpreted as usual
           r"continues here with $\pi$")

(不是使用三行,而是用单个空格分隔字符串)。

实际上,Python会自动串联紧随其后的字符串文字,并且您可以混合使用原始字符串(r"…")和带有字符插值("\n")的字符串。


只需快速评论一下-这是一种完美的解决方案,是一种简便的方法,可以用(a),(b)等标记子图,当该标记应位于图形下方并以xlabel居中时。这样plt.tight_layout()也可以看到整个标签并进行相应的调整。
SeanM '17年

2
这应该是公认的答案。另请注意,它适用于Python字符串格式,例如r"$\alpha$ : {0} " "\n" r"$\beta$ : {1}".format(a, b)
berkelem

12
plt.bar([1, 2], [4, 5])
plt.xlabel("My x label")
plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here")

只需用非原始字符串形式的换行符连接字符串即可。


2

以下matplotlib python脚本使用换行符创建文本

ax.text(10, 70, 'shock size \n $n-n_{fd}$')

以下没有新行。注意文本前的r

ax.text(10, 70, r'shock size \n $n-n_{fd}$')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.